我有一个由 (=) 等号分隔的语言变量列表。示例列表:
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";
}
};
MYYA