如何用不在数字之间的斜线分割字符串?
How to split string by slash which is not between numbers?
如何用不在数字之间的斜线分割字符串?
我正在使用下面的 preg_split 函数:
$splitted = preg_split('#[/\\\_\s]+#u', $string);
输入:"925/123 Black/Jack"
现在拆分结果:
[
0 => '925',
1 => '123',
2 => 'Black',
3 => 'Jack'
]
我要的拆分结果:
[
0 => '925/123',
1 => 'Black',
2 => 'Jack'
]
一个选项是匹配 1 个或多个数字除以正斜杠,在左侧和右侧有空白边界。
然后使用SKIP FAIL,匹配字符class中列出的1次或多次。请注意,您不必转义下划线。
(?<!\S)\d+(?:/\d+)+(?!\S)(*SKIP)(*F)|[/\_\s]+
说明
(?<!\S)\d+(?:/\d+)+(?!\S)
匹配正斜杠之间的重复数字
(*SKIP)(*F)
跳过
|
或
[/\_\s]+
匹配任何列出的 1+ 次
例如
$string = "925/123 Black/Jack";
$pattern = "#(?<!\S)\d+(?:/\d+)+(?!\S)(*SKIP)(*F)|[/\\_\s]+#u";
$splitted = preg_split($pattern, $string);
print_r($splitted);
输出
Array
(
[0] => 925/123
[1] => Black
[2] => Jack
)
您可以使用
preg_split('#(?:[\s\\_]|(?<!\d)/(?!\d))+#u', '925/123 Black/Jack')
查看 PHP demo and the regex demo 和正则表达式图:
详情
(?:
- 非捕获组的开始:
[\s\_]
- 空格,\
或 _
|
- 或
(?<!\d)/(?!\d)
- /
未包含数字
)+
- 非捕获组结束,重复 1 次或多次。
您的正则表达式不必要地复杂。您需要将字符串拆分为:
- 要么是 space(也许更普遍 - 一系列白色字符),
- 或 斜线
- 前面没有数字(负后视),
- 后面没有数字(负先行)。
所以您需要的正则表达式(包含在 # 个字符中,带有双反斜杠)是:
#(?<!\d)/(?!\d)|\s+#
代码示例:
$string = "925/123 Black/Jack";
$pattern = "#(?<!\d)/(?!\d)|\s+#";
$splitted = preg_split($pattern, $string);
print_r($splitted);
打印你想要的:
Array
(
[0] => 925/123
[1] => Black
[2] => Jack
)
如何用不在数字之间的斜线分割字符串? 我正在使用下面的 preg_split 函数:
$splitted = preg_split('#[/\\\_\s]+#u', $string);
输入:"925/123 Black/Jack"
现在拆分结果:
[
0 => '925',
1 => '123',
2 => 'Black',
3 => 'Jack'
]
我要的拆分结果:
[
0 => '925/123',
1 => 'Black',
2 => 'Jack'
]
一个选项是匹配 1 个或多个数字除以正斜杠,在左侧和右侧有空白边界。
然后使用SKIP FAIL,匹配字符class中列出的1次或多次。请注意,您不必转义下划线。
(?<!\S)\d+(?:/\d+)+(?!\S)(*SKIP)(*F)|[/\_\s]+
说明
(?<!\S)\d+(?:/\d+)+(?!\S)
匹配正斜杠之间的重复数字(*SKIP)(*F)
跳过|
或[/\_\s]+
匹配任何列出的 1+ 次
例如
$string = "925/123 Black/Jack";
$pattern = "#(?<!\S)\d+(?:/\d+)+(?!\S)(*SKIP)(*F)|[/\\_\s]+#u";
$splitted = preg_split($pattern, $string);
print_r($splitted);
输出
Array
(
[0] => 925/123
[1] => Black
[2] => Jack
)
您可以使用
preg_split('#(?:[\s\\_]|(?<!\d)/(?!\d))+#u', '925/123 Black/Jack')
查看 PHP demo and the regex demo 和正则表达式图:
详情
(?:
- 非捕获组的开始:[\s\_]
- 空格,\
或_
|
- 或(?<!\d)/(?!\d)
-/
未包含数字
)+
- 非捕获组结束,重复 1 次或多次。
您的正则表达式不必要地复杂。您需要将字符串拆分为:
- 要么是 space(也许更普遍 - 一系列白色字符),
- 或 斜线
- 前面没有数字(负后视),
- 后面没有数字(负先行)。
所以您需要的正则表达式(包含在 # 个字符中,带有双反斜杠)是:
#(?<!\d)/(?!\d)|\s+#
代码示例:
$string = "925/123 Black/Jack";
$pattern = "#(?<!\d)/(?!\d)|\s+#";
$splitted = preg_split($pattern, $string);
print_r($splitted);
打印你想要的:
Array
(
[0] => 925/123
[1] => Black
[2] => Jack
)