代码之家  ›  专栏  ›  技术社区  ›  Joseph Bada

如何从正则表达式中的字符串获取一组字符串

  •  0
  • Joseph Bada  · 技术社区  · 5 年前

    我不是一个正则表达式专家,并试图寻找解决方案,但我 真正地 找不到。这是一个基本的正则表达式问题。希望你能帮助我

    把它当作

        $ret_value = ($norm_string_value == 'true' ? true : false);
    
        $line = trim($line);
                    if (strlen($line)==0 || $line[0]==';' || $line[0] == '#') {
                        continue;
                    } 
        $foobar = hello_world($foo) == 'bar'
    

    Im使用netbeanside并使用Find功能搜索一段代码。。

    我期望的匹配是:

        $norm_string_value == '
        $line[0]==';'
        $line[0] == '
        hello_world($foo) == '
    

    我现在的正则表达式是这样的 [$].*? == '

        $ret_value = ($norm_string_value == '
        $line)==0 || $line[0]==';' || $line[0] == '
        $foobar = hello_world($foo) == '
    

    你看,我有一个问题与美元符号和您好世界…-我不知道如何包括在我的正则表达式

    0 回复  |  直到 5 年前
        1
  •  1
  •   The fourth bird    5 年前

    对于当前的示例数据,要获得所有4个匹配项,可以使用这个稍微更新的模式,同时考虑到周围的空白字符:

    (?:\w+\()?\$[^$\r\n]*\h*==\h*'(?:;')?
    

    部分地

    • (?:\w+\()? (
    • \$ 匹配`$~
    • [^$\r\n]* 匹配除 $ 或者换行
    • \h*==\h* 匹配 ==
    • '(?:;')? ;'

    Regex demo

        2
  •  0
  •   Joseph Bada    5 年前

    谢谢你的评论!我找到了答案:

    (?:\w+\()?\$[^$\r\n]* == \h*'(?:;')?
    

    (?:\w+\()?\$[^$\r\n]*={2,3}\h*'(?:;')?
    

    只需添加一些空格并删除{2,3}并将其改为==即可

    实际上,这样做的真正目的是使我的代码条件 === == 单引号让我确信左边的一对是一个字符串,所以我需要进行转换 (string)

    \S*[$][^$]*==\s*'
    

    我的一个样本匹配:

    ($norm_string_value == '
    

    我不需要包括“括号”。只是:

    $norm_string_value == '
    

    谢谢大家!