我有一个字符串,我想在某个" context"之后匹配主题标签,例如|product
。
|product
之后我想匹配之后的主题标签。
所以这是我的完整字符串|product#houtprint#laserprint|materiaal#hout
。
这是我的正则表达模式,直到\|product(?<product>#[^\|]+)
。
我现在在#houtprint#laserprint
上找到一个匹配项,但我想单独匹配它们#houtprint
和#laserprint
。
这也是我的PHP部分:
preg_match_all("~\|".$context."(?<".$context.">#[^\|]+)~", $tags_string, $matches);
如何确保我将产品作为单独的组?
答案 0 :(得分:2)
您需要设置一个基于\G
的边界,以便preg_match_all
可以匹配连续的主题标签(在您指定的子字符串之后相互跟随):
(?:\|product|\G(?!\A))(?<product>#[^|#]+)
不确定你真的需要这个命名的捕获组。
请参阅regex demo
<强>详情:
(?:\|product|\G(?!\A))
- |product
substring(\|product
)或上一次成功匹配的结束(\G(?!\A)
)(可以交换这些分支以获得更好的性能)(?<product>#[^|#]+)
- &#34;产品&#34;命名捕获组匹配
#
- 哈希符号[^|#]+
- |
和#
以外的一个或多个字符。$re = '/(?:\|product|\G(?!\A))(?<product>#[^|#]+)/';
$str = '|product#houtprint#laserprint|materiaal#hout';
preg_match_all($re, $str, $matches);
print_r($matches["product"]);
// => Array ( [0] => #houtprint [1] => #laserprint )