Php 如何在函数中找到关键字?
首先谢谢你的帮助 我有一些JScript,如:Php 如何在函数中找到关键字?,php,regex,Php,Regex,首先谢谢你的帮助 我有一些JScript,如: var id="001"; var name="Jerry"; ... function f1() { ... var qid="q1"; ... } ... var qid="aaabbb"; ... function f2(){ ... var myid="q1"; ... } ... 我想使用正则表达式来获取包含关键字“q1”的函数名。有没有一个简单的方法可以做到这一点 函数可以在JavaScript中的其
var id="001";
var name="Jerry";
...
function f1() {
...
var qid="q1";
...
}
...
var qid="aaabbb";
...
function f2(){
...
var myid="q1";
...
}
...
我想使用正则表达式来获取包含关键字“q1”的函数名。有没有一个简单的方法可以做到这一点 函数可以在JavaScript中的其他函数中定义,因此使用正则表达式试图解决此问题是不可能的。对不起:-( 此外,问题没有明确说明。在这种情况下,您希望函数名是什么
function outerFunction(x, y) {
var innerFunction = function(z) {
return {
firstProperty: function() {
return "q1";
}
};
};
}
请参阅?声明函数的三种不同方法。如何创建一个足够通用的解决方案,以了解此类情况下“正确”(最相关)的函数名?函数可以在JavaScript中的其他函数中定义,因此使用正则表达式试图解决此问题是不可能的。抱歉:-(
function outerFunction(x, y) {
var innerFunction = function(z) {
return {
firstProperty: function() {
return "q1";
}
};
};
}
此外,问题没有明确说明。在这种情况下,您希望函数名是什么
function outerFunction(x, y) {
var innerFunction = function(z) {
return {
firstProperty: function() {
return "q1";
}
};
};
}
请参阅?声明函数的三种不同方法。您如何创建一个足够通用的解决方案,以了解此类情况下“正确”(最相关)的函数名?以下是对我有效的正则表达式:
function outerFunction(x, y) {
var innerFunction = function(z) {
return {
firstProperty: function() {
return "q1";
}
};
};
}
(function(.*)\(.*|\n*"q1")
下面是我如何测试它的:
以下是似乎适合我的正则表达式:
(function(.*)\(.*|\n*"q1")
下面是我如何测试它的:
尝试以下操作:
/^function ([^(]*?)\((?=(?:[^\n]|\n[^}])*("q1")).*?^}/ms
请注意,如果“q1”位于函数外部,或函数名称内部没有“q1”,则该名称与“q1”不匹配。对于每个匹配项,第一组将是函数名称,第二组将是“q1”
在行动中看到它:
下面是一个解释:
$regex = <<<END
/
^function[ ] # start looking when a line starts with function
([^(]*?)\( # capture the function name into group 1
(?= # start a lookahead
(?:[^\n]|\n[^}])* # consume characters until a line starts with '}'
("q1") # or until we find "q1" (and place it in group 2)
) # end lookahead
.*?^} # consume until end of function (optional)
/msx # m and s flags for consuming multiple line handling
END;
$regex=尝试以下操作:
/^function ([^(]*?)\((?=(?:[^\n]|\n[^}])*("q1")).*?^}/ms
请注意,如果“q1”位于函数外部,或函数名称内部没有“q1”,则该名称与“q1”不匹配。对于每个匹配项,第一组将是函数名称,第二组将是“q1”
在行动中看到它:
下面是一个解释:
$regex = <<<END
/
^function[ ] # start looking when a line starts with function
([^(]*?)\( # capture the function name into group 1
(?= # start a lookahead
(?:[^\n]|\n[^}])* # consume characters until a line starts with '}'
("q1") # or until we find "q1" (and place it in group 2)
) # end lookahead
.*?^} # consume until end of function (optional)
/msx # m and s flags for consuming multiple line handling
END;
$regex=整个脚本都在一个字符串中吗?可能无法使用regex完成:-(祝你好运!不,没有。编程语言是上下文无关的,regex进程只是常规语言。这不是regex的用途。你可能想尝试lexer/tokenizer来完成这项工作。整个脚本都在一个字符串中吗?可能无法使用regex完成。)-(祝你好运!不,没有。编程语言是上下文无关的,regex进程只是普通语言。这不是regex的功能。你可能想尝试lexer/tokenizer来完成这项工作。这实际上太贪婪了。我会在微调时更新答案。这实际上太贪婪了。我会在微调时更新答案在添加代码示例之前,我投了否决票,但即便如此,我希望我知道-(尽管你说的很有道理,但你还是有点口是心非。看来否决票已经没有了now@Mikhail:作为一个buzz kill并不是投反对票的正当理由。@PlatinumAzure哦,我完全同意你的观点。跳出框框思考值得投赞成票。在我添加代码示例之前,它被否决了,但即使如此,我希望我知道。:-(尽管你说的很有道理,但你还是有点口是心非。看来否决票已经没有了now@Mikhail:成为一个“口诛笔伐”的人并不是投反对票的正当理由。@PlatinumAzure哦,我完全同意你的观点。跳出框框思考值得投赞成票。这很好,谢谢你使用rubular:-D我忘记了前瞻。你不需要分组(“q1”)
分别删除。删除(
只会产生函数名。嗨,F.J,当q1从函数f1中删除时,它不起作用。它得到f1而不是f2:var id=“001”;var name=“Jerry”…函数f1(){…var qid=“q2”;…}…var qid=“aaabbb”…函数f2(){…var myid=“q1”;…}…@JerryLu,它似乎与f1的开头和f2的结尾相匹配。首先按“函数”将字符串拆分为一个函数数组,然后在每个单元格中搜索“q1”可能更简单如果用户缩进任何函数,无论是通过嵌套还是仅仅因为键入错误,这都不起作用。正如我在回答中所解释的,并非所有函数都是用function someFunctionName()声明的
@JerryLu-刚刚编辑好,不再有这个问题。这很好,感谢您使用rubular:-D我忘记了前瞻。您不需要单独分组(“q1”)
。删除()
将只产生函数名。您好,F.J,当q1从函数f1中删除时,它不起作用。它得到f1而不是f2:var id=“001”;var name=“Jerry”…函数f1(){…var qid=“q2”…}…var qid=“aaabbb”…函数f2(){…var myid=“q1”…}…@JerryLu,它似乎与f1的开头和f2的结尾相匹配。首先按“函数”将字符串拆分为一个函数数组,然后在每个单元格中搜索“q1”可能更简单如果用户缩进任何函数,无论是通过嵌套还是仅仅因为键入错误,这都不起作用。正如我在回答中所解释的,并不是所有函数都是用function someFunctionName()
@JerryLu声明的,只是经过编辑,这样就不再有这个问题了。