我有一个长字符串,其中包含网址,标题,描述如下:
||url:foo||title:Books|Pencils||description:my description||
数据始终以||
开头和结尾
我如何匹配该标题(Books|Pencils
(,其中可能包含一个|
(如上面的示例(但不包括两个||
?
我尝试了这样的规则(使用 php preg_match(:
#||title:(.*)([||])(.*)#
我猜,
(?<=||title:).*?(?=||)
可能只是这样做。
正则表达式演示 1
如果你想得到另外两个,
(?<=||burl:|btitle:|bdescription:).*?(?=||)
正则表达式演示 2
测试
$re = '/(?<=||burl:|btitle:|bdescription:).*?(?=||)/m';
$str = '||url:foo||title:Books|Pencils||description:my description||';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);
输出
array(3) {
[0]=>
array(1) {
[0]=>
string(3) "foo"
}
[1]=>
array(1) {
[0]=>
string(13) "Books|Pencils"
}
[2]=>
array(1) {
[0]=>
string(14) "my description"
}
}
如果您希望简化/更新/探索表达式,已在 regex101.com 的右上角面板上进行了解释。如果您有兴趣,可以在此调试器链接中观看匹配步骤或修改它们。调试器演示了 RegEx 引擎如何逐步使用一些示例输入字符串并执行匹配过程。