我一直试图弄清楚这一点,但我担心正则表达不是我的事。在此示例字符串中:“我的名字是%name,我住在$ address。”我正在尝试获取以“%”开头的字词然后替换它们根据在正则表达式中找到的单词,$name
或$address
中的值为{{1}}或{{1}}。然后使用替换的值返回新字符串。
不应返回以下字词: aaa%aaa (%不是第一个字符)和 \%word (%是转义)
这是在PHP中。我正在使用它,因为我从 * .ini 文件中获取数据,其中所有内容都是字符串。我删除了$ _POST示例,因此它没有误导性。
答案 0 :(得分:0)
这个应该没问题:
(?<!\\|\w)%\w+
然而,在显示之前不清理$ _POST / $ _ GET通常是一件坏事。
答案 1 :(得分:0)
在javascript或类似的REGEX引擎中,您可以使用:
\B(%\w+)\b
修改强>
在这种情况下,最终的\b
是可选的,因为\w
将匹配所需的所有字符,并在@tchrist指出的任何非字符字符中停止。
修改2 :这与\%name
不匹配:
(?:^|\s)(%\w+)
答案 2 :(得分:0)
这看起来可能有效。这甚至可以逃脱。 -
(?<!\\)(?:\\.)*(?<![%\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
答案 3 :(得分:-1)
这样的事情会有所帮助。
$string = "Hello %name from %city ";
$name = "Joe";
$city = "Boston";
$array = array();
preg_match("/%\w+/",$string,$array);
foreach($array as $string1)
echo "match: ".$string1;