正则表达式与两个分隔符字符不匹配



我有一个长字符串,其中包含网址,标题,描述如下:

||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 引擎如何逐步使用一些示例输入字符串并执行匹配过程。


最新更新