繁体   English   中英

正则表达式:以“%”开头的单词

[英]Regex: Searching for words with '%' at the beginning

我一直试图自己解决这个问题,但是我担心正则表达式不是我的事。 在此示例字符串中: “我的名字是%name,我住在$ address。” 我试图获取以“%”开头的单词,然后将它们替换为$name$address的值,具体取决于在正则表达式中找到的单词。 然后,将返回新字符串,其中包含替换后的值。

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

这是在PHP中。 我正在使用它,因为我是从* .ini文件中抓取数据的,其中所有内容都是字符串。 我删除了$ _POST示例,以免引起误解。

这应该做得很好:

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

但是,在显示之前/任何之前不对$ _POST / $ _ GET进行消毒通常是一件坏事。

在javascript或类似的REGEX引擎中,您可以使用:

\B(%\w+)\b

编辑:
在这种情况下,最后的\\b是可选的,因为\\w将匹配所需的所有字符,并停止使用@tchrist指出的任何非单词char。

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

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

这看起来可能可行。 这种对齐方式甚至可以逃脱。 --

(?<!\\\\)(?:\\\\.)*(?<![%\\w])%(\\w+)

展开-

(?<!\\)     # 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

这样的事情会有所帮助。

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

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


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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM