正则表达式:在开头搜索带有'%'的单词

时间:2012-02-13 21:55:58

标签: regex

我一直试图弄清楚这一点,但我担心正则表达不是我的事。在此示例字符串中:“我的名字是%name,我住在$ address。”我正在尝试获取以“%”开头的字词然后替换它们根据在正则表达式中找到的单词,$name$address中的值为{{1}}或{{1}}。然后使用替换的值返回新字符串。

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

这是在PHP中。我正在使用它,因为我从 * .ini 文件中获取数据,其中所有内容都是字符串。我删除了$ _POST示例,因此它没有误导性。

4 个答案:

答案 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;