[英]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.