【发布时间】:2018-07-29 22:16:22
【问题描述】:
我需要使用 preg_split() 查找 PCRE 模式的帮助。
我使用下面的正则表达式模式根据字符串的起始 3 个字符代码和分号来拆分字符串。该模式在 Javascript 中运行良好,但现在我需要在 PHP 中使用该模式。我尝试了 preg_split() 但只是退回垃圾。
// 每组都以三个字母代码开头,三个段用分号隔开。字符串不会以分号结尾。
// Pseudocode
string_to_split = "AAA;RED;111;BBB;BLUE;22;CCC;GREEN;33;DDD;WHITE;44"
// This works in JS
// https://regex101.com
$pattern = "/[AAA|BBB|CCC|DDD][^;]*;[^;]*[;][^;]*/gi";
Match 1
Full match 0-11 `AAA;RED;111`
Match 2
Full match 12-23 `BBB;BLUE;22`
Match 3
Full match 24-36 `CCC;GREEN;33`
Match 4
Full match 37-49 `DDD;WHITE;44`
$pattern = "/[AAA|BBB|CCC|DDD][^;]*;[^;]*[;][^;]*/";
$split = preg_split($pattern, $string_to_split);
returns
array(5)
0:""
1:";"
2:";"
3:";"
4:""
【问题讨论】:
-
[AAA|BBB|CCC|DDD]看起来不像在 JS 中正确运行。你的意思是(AAA|BBB|CCC|DDD)? -
预期结果是什么?
-
[AAA|BBB|CCC|DDD]与[ABCD|]相同,它的意思是“来自字符类内部的任何字符(即在[和]之间)”。你想要的是(AAA|BBB|CCC|DDD),这意味着“AAA或BBB或CCC或DDD”。 -
@axiac,您可以使用正则表达式在 JavaScript 中拆分字符串。
-
@fubar 确实,
String.prototype.split()接受RegExp作为参数。但是,需求的描述要求匹配,而不是拆分。
标签: php pcre preg-split