我试图编写一个在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);
不幸的是,我需要有函数名,因为我只想匹配一个特定的函数。用正则表达式可行吗?
答案 0 :(得分:3)
在引号内使用前瞻性排除括号内的匹配:
*?
这表示"匹配一个结束括号,后跟偶数引号数" (回想零是"偶数"数字)。引号中的字符后面有奇数引号。
如果您在同一行上有多个匹配项,那么不情愿的量词<!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>
将停在首这样的匹配位置。