Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在函数中找到关键字?_Php_Regex - Fatal编程技术网

Php 如何在函数中找到关键字?

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中的其

首先谢谢你的帮助

我有一些JScript,如:

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声明的,只是经过编辑,这样就不再有这个问题了。