正则表达式表达式匹配嵌套括号内的分号

我需要一个正则表达式来匹配嵌套括号内的分号。

例如,在

行中
for (int i = 3; i <= sqrt(n); i = i + 2) { 

我只需要匹配两个分号,后跟 3

目前,我正在使用表达式/;(?=((?!\(\().)*?\))/

但是在下面的行中使用上面的表达式时,

int rows = 5; for(int i = 1; i <= rows; ++i){ 

后跟 5 的分号也匹配。

我只需要在方括号内匹配分号。

如果有人可以给我推荐一个可以克服这两种情况的正则表达式,那将是一个很大的帮助。

Example

ppwpp 回答:正则表达式表达式匹配嵌套括号内的分号

您可能会获得forwhile的所有匹配项,并在其后加上平衡的括号,然后仅将匹配项内的分号替换为preg_replace_callback

'~\b(?:while|for)\s*(\((?:[^()]++|(?1))*\))~u'

请参见regex demo

详细信息

  • \b-单词边界
  • (?:while|for)-whilefor个单词
  • \s*-超过0个空格
  • (\((?:[^()]++|(?1))*\))-第1组(其模式将与(?1)重复出现):
    • \(-一个(字符
    • (?:[^()]++|(?1))*-除()或整个第1组模式以外,出现0个或更多的1个以上字符
  • \)-一个)字符

请参见PHP demo

$s = "for (int i = 3; i <= sqrt(n); i = i + 2) {";
echo preg_replace_callback('~\b(?:while|for)\s*(\((?:[^()]++|(?1))*\))~u',function($m) {
    return str_replace(';',';',$m[0]); },$s);

输出:

for (int i = 3; i <= sqrt(n); i = i + 2) {
本文链接:https://www.f2er.com/2585489.html

大家都在问