如何使此正则表达式表达式查找文本中与此格式匹配的每个字符串,我尝试添加花括号,但它只能找到格式中的第一个单词,而在删除时会找到每个单词。
My regex expression: {((?:[a-z][a-z0-9_]*))
My text: {Hello|Hi|Hey} John, How are you? I'm fine
答案 0 :(得分:1)
您可以使用这种基于环视的正则表达式,它将所有括号中的匹配项都显示在
(?<=[{|])\w+(?=[|}])
尝试此Python代码,
$s = "{Hello|Hi|Hey} John, How are you? I'm fine";
preg_match_all('/(?<=[{|])\w+(?=[|}])/',$s,$matches);
print_r($matches);
Array
(
[0] => Array
(
[0] => Hello
[1] => Hi
[2] => Hey
)
)
答案 1 :(得分:1)
要获取大括号之间的所有匹配项,您可以匹配{
至}
并捕获捕获组之间的匹配。
然后使用explode并将|
用作分隔符。如果有多个结果,则可以循环结果:
$str = "My text: {Hello|Hi|Hey} John, How are you? I'm fine";
preg_match_all('~{([^}]+)}~', $str, $matches);
foreach($matches[1] as $match) {
print_r(explode('|', $match));
}
结果
Array
(
[0] => Hello
[1] => Hi
[2] => Hey
)
另一种选择可能是利用\G
锚点:
(?:\G(?!\A)|{(?=[^{}]*?}))([^|{}]+)[|}]
说明
(?:
非捕获组
\G(?!\A)
上一场比赛的结尾,但没有在开头|
或{(?=[^{}]*?})
匹配{
并断言以下内容不包含}
,然后包含}
)
关闭非捕获组([^|{}]+)
在与character class [|}]
匹配字符类中列出的内容