我有以下字符串:
12345 This could be anythingREMOVE
我需要匹配12345
和This could be anything
。不幸的是,我需要解析的格式在行尾也有一个字符串,并不总是存在(在本例中为REMOVE
)。如何在没有REMOVE
的情况下匹配我正在寻找的内容?我尝试过以下模式:
^(\d{5}) (.*)(?:REMOVE|$)
不幸的是,REMOVE
被通配符接收:
(
[0] => Array
(
[0] => 12345 This could be anythingREMOVE
)
[1] => Array
(
[0] => 12345
)
[2] => Array
(
[0] => This could be anythingREMOVE
)
)
答案 0 :(得分:2)
如果最后一个字符串REMOVE
是可选的,那么为什么不能使用htis regex:
"/^(\d{5}) /"
但是,如果你真的想在匹配模式中避免使用REMOVE
,那么请使用:
$s = '12345 This could be anythingREMOVE';
if (preg_match("/^(\d{5}) (.*?)(?:REMOVE|)$/", $s, $arr))
var_dump($arr);
输出:
array(3) {
[0]=>
string(34) "12345 This could be anythingREMOVE"
[1]=>
string(5) "12345"
[2]=>
string(22) "This could be anything"
}
答案 1 :(得分:1)
你可以试试这个正则表达式:
^(\d{5})((?:.(?!REMOVE))+.)
如何运作
^(\d{5})
- 匹配字符串的开头,后跟五位数[0-9]
。一组括号用于捕获匹配的文本。 ((?:.(?!REMOVE))+
- 匹配任何字符,如果没有紧跟一个或多个secuence REMOVE
。它停在n
的{{1}}。 与anything
匹配,因为后跟g
。
REMOVE
- 允许.)
匹配。