查找分隔符后的单词并忽略该单词是否被大括号包围

我有一个由 (=) 等号分隔的语言变量列表。示例列表:


global.second = second 

global.minute = minute

global.respect = respect

global.Respect = Respect

respect.count = You have # ${global.respect}

give.respect = Get more ${global.respect} by giving others respect.

give.Respect = Get more ${global.Respect} by giving others Respect.

我一直在为正则表达式苦苦挣扎,因为如果 (=) 等号之后的特定单词存在,我需要捕获整行,如果单词在大括号中,则忽略,但如果该单词在一个之后存在,则仍然捕获整行那是在大括号中。


使用示例列表并搜索尊重:


IGNORE: global.second = second 

IGNORE: global.minute = minute

CAPTURE LINE: global.respect = respect

CAPTURE LINE: global.Respect = Respect

IGNORE: respect.count = You have # ${global.respect}

CAPTURE LINE: give.respect = Get more ${global.respect} by giving others respect.

CAPTURE LINE: give.Respect = Get more ${global.Respect} by giving others Respect.

使用 google 和 stackoverflow 我想出了以下正则表达式:


/((?!\{[^\}]*?)(respect)(?![^\{]*?}))$/mi

但它不起作用,因为它只捕获了尊重和尊重。


为了捕获整行,我将其修改为


^(.*=.*?)((?!\{[^\}]*?)(respect)(?![^\{]*?}))$

但它仍然只捕获:


global.respect = respect

global.Respect = Respect

我是正则表达式新手,我不知道如何制作这个复杂的正则表达式。如果有人可以提供帮助,将不胜感激!我在“显示一些代码”中添加了我的 php 过滤器功能。$search_word 来自我其中一页的输入文本框。


function FilterWord($search_word, $main_file_path, $filter_file_path)

{

    $content = file_get_contents($main_file_path);

    $pattern = preg_quote($search_word, '/');

    //$pattern = "/^.*=.*$pattern.*\$/mi";

    $pattern = "/(.*=.*?)((?!\{[^\}]*?)($pattern)(?![^\{]*?}))$/mi";

    //[^$search_word {}]+(?![^{]*})

    //$pattern = "/^.*=.*$pattern.*\$/mi";

    //"/^.*=.*(!\$*.$pattern.*)($pattern.*)\$/m";

    //$pattern = "/^.*=.*(?!\{.*$pattern.*\}*?)($pattern.*)\$/m";

    //((?!\{[^\}]*?)(kudo)(?![^\{]*?}))

    //$pattern = "/(.*=.*?)(?:(?!\{[^\}]*?)\b)($search_word)(?:\b(?![^\{]*?\}))\$/mi";

    if(preg_match_all($pattern, $content, $matches)){

        file_put_contents($filter_file_path, implode("\n", $matches[0]));

    }

    else{

        echo "No matches found";

    }

};


饮歌长啸
浏览 110回答 2
2回答

MYYA

我不确定我是否正确理解了这个问题,但这个表达式可能是一个选项:\.([A-Za-z]+)\s*(?==)(?=.*\b\1\b.*).*在这里,我们使用反向引用来捕获我们想要的工作,那么如果该词存在,将获得整行。
打开App,查看更多内容
随时随地看视频慕课网APP