什么样的正则表达式模式可以用于使用圆括号对中的以下点查找单词。匹配包裹的图案
as。 df.kj hlasfa(asd。 las kdfh。)dfs adk jfh。一个(sd.kf)JHD(DSK FH。)dskfdf ASDF DFS lkjh asdfdsfjkhlkjh(ASDF。)作为fadf ASF
期望的结果以粗体显示。
什么样的正则表达式模式可以用于使用圆括号对中的以下点查找单词。匹配包裹的图案
as。 df.kj hlasfa(asd。 las kdfh。)dfs adk jfh。一个(sd.kf)JHD(DSK FH。)dskfdf ASDF DFS lkjh asdfdsfjkhlkjh(ASDF。)作为fadf ASF
期望的结果以粗体显示。
一个多的选择是:
\b[a-zA-Z]+[.](?=[)])(?=[^(]*[)])
@Reza - 没有向后看。第一个肯定的前瞻'(?= [)])'确保在期间后面有一个空格或者结束圆括号。第二个肯定性前瞻'(?= [^(] * [)])'确保在后面的圆括号之后出现圆形括号,并且在该期间和该圆形括号之间没有开头的圆括号。 –
你可以使用一个lookahead,断言有下一个关闭一个之前没有开括号:
preg_match_all('/[a-zA-Z]+\.(?![a-zA-Z])(?=[^()]*\))/', $input, $matches);
你会发现在四场比赛中$matches
。
第一个负面预测消除了HamZa在评论中提到的情况。第二个(肯定的)lookahead试图在下一个开场之前找到右括号。
这里有一个警告。一旦你嵌套括号,这将开始崩溃。 some(text. (here))
将不匹配text.
。嵌套模式(使用括号可能会出现)通常超出正则表达式的范围,尽管某些引擎可以部分处理它们。如果这是你的情况,你最好手动浏览字符串并计算括号。
应(sd.kf)也被加粗? – HamZa
@HamZaDzCyberDeV不应该 – PHPst
你尝试过那种方法不起作用? – rdlowrey