用于匹配函数参数的正则表达式

时间:2015-05-28 04:04:45

标签: regex

我试图编写一个在PHP中使用的正则表达式来匹配特定函数的参数。以下是我尝试匹配的一些示例:

$content = "myfunction('Text with (nested) parentheses')
            myfunction('Text2 without nested parentheses')
            myfunction('Text2 with variables ' + myvar)
            myfunction(myvar)
            myfunction(myvar1 + \"(nested) some text here\" + (error.length ? \" \" + errorMsg : \"\"))";

preg_match_all('/myfunction\(([^()]|(?R))*\)/', $content, $matches);

你可以想象,除了带有嵌套括号的那个之外的所有返回。 |(?R)是我期望它能够起作用的东西。但是,如果我这样做,事情就会按预期发挥作用:

$content = "('Text with (nested) parentheses')
        ('Text2 without nested parentheses')
        ('Text2 with variables ' + myvar)
        (myvar)";

preg_match_all('/\(([^()]|(?R))*\)/', $content, $matches);

不幸的是,我需要有函数名,因为我只想匹配一个特定的函数。用正则表达式可行吗?

1 个答案:

答案 0 :(得分:3)

在引号内使用前瞻性排除括号内的匹配:

*?

请参阅has a polyfill available

这表示"匹配一个结束括号,后跟偶数引号数" (回想零是"偶数"数字)。引号中的字符后面有奇数引号。

如果您在同一行上有多个匹配项,那么不情愿的量词<!DOCTYPE html> <html> <head> <title></title> <script type="text/javascript"> var e,f; function values() { e = Number(document.getElementById("e").value); f = Number(document.getElementById("f").value); } function MULTI() { values(); result = (e+f); result1 = (e-f); result2 = (e*f); result3 = (e/f); document.getElementById("MULTI").innerHTML = "Adding the two numbers" +result + "Subtracting the two numbers " +result1 + "Multiplying the two numbers " +result2 + "Dividing the two numbers" +result3; } </script> </head> <body> <div id="cylinder"> <input type="text" id="e" placeholder="Base..."/><br> <input type="text" id="f" placeholder="Height..."/><br> <input type="button" onclick="MULTI()" value="Calculate!"/> </div> <div id="MULTI"></div><br><br><br> </body> </html>将停在这样的匹配位置。