Regex 正则表达式:搜索带有';%的单词';起初

Regex 正则表达式:搜索带有';%的单词';起初,regex,Regex,我自己也一直想弄明白,但恐怕正则表达式不是我的拿手好戏。在此示例字符串中:“我的名字是%name,我住在$address中。”我试图获取以“%”开头的单词,然后根据在正则表达式中找到的单词,将它们替换为$name或$address中的值。然后返回新字符串以及替换的值 不应返回如下单词:aaa%aaa(%不是第一个字符)和\%word(转义了%s) 这是用PHP编写的。我之所以使用它,是因为我从一个*.ini文件中获取数据,其中所有内容都是字符串。我删除了$\u POST示例,这样就不会产生误导。

我自己也一直想弄明白,但恐怕正则表达式不是我的拿手好戏。在此示例字符串中:“我的名字是%name,我住在$address中。”我试图获取以“%”开头的单词,然后根据在正则表达式中找到的单词,将它们替换为
$name
$address
中的值。然后返回新字符串以及替换的值

不应返回如下单词:aaa%aaa(%不是第一个字符)和\%word(转义了%s)


这是用PHP编写的。我之所以使用它,是因为我从一个*.ini文件中获取数据,其中所有内容都是字符串。我删除了$\u POST示例,这样就不会产生误导。

这一个应该可以:

(?<!\\|\w)%\w+
(?

但是,在显示之前不清理$\u POST/$\u GET/任何东西通常是一件坏事。

在javascript或类似的正则表达式引擎中,您可以使用:

\B(%\w+)\b
编辑:
在这种情况下,最后的
\b
是可选的,因为
\w
将匹配所有需要的字符,并在@tchrist指出的任何非单词字符中停止

编辑2:这将与
\%name
不匹配:

(?:^|\s)(%\w+)

像这样的东西会有帮助的

$string = "Hello %name from %city ";

$name = "Joe";
$city = "Boston";
$array = array();


preg_match("/%\w+/",$string,$array);

foreach($array as $string1)
               echo "match: ".$string1;

这看起来很有可能。这是一个偶数逃逸

扩大-

(?<!\\)     # Not an escape behind us
(?:\\.)*    # 0 or many esc plus anything
(?<![%\w])  # not % nor \w behind us
%(\w+)      # % then capture grp1 bunch of word chars

(?您尚未定义“单词”。你没有在标记集中包含你正在使用的编程语言或库。你的问题无法回答。我假设是PHP,但为什么你需要使用正则表达式来匹配它?我想如果我读对了,简单的字符串concat会更容易。你能澄清你的问题吗?该死的世界是什么d?是“不应该”一词吗?是“不应该”吗?是“M”吗ᶜ“金利”是一个词吗?是“温柔”是一个词吗?是“尼诺”是一个词吗?是“立面”吗?是“外部限制”是一个词吗?是“3.14159”是一个词吗?是“π”是一个词吗?是“1/2”一个单词?Qu'est-ce que c'est Qu'un word?询问者想知道。这个句子有五个单词。一个单词是连续字符,后跟空格,就像在任何编程语言中一样:)@Thecrocodilehunter:然后是字符串
“”“”"根据你的定义,
是一个词。单词边界的最终
\b
到底是什么。在这种情况下是可选的,因为多词规范。谢谢你指出。我将对我的答案进行编辑。这不能处理
\%请\%不要\%正确地切换\%hing
。这不是完美的解决方案,只是一个开始。您的评论是正确的。这实际上不允许转义。
\\%test
将不会通过,
%%%test
将通过。但是,这可能与操作有关。哦,对了。这根本不允许\\%test或%%test。@sln/enchance:是的,忘了提到这一点。感觉到了吗ee接受nlp的答案,我将删除这一个。