用于匹配包含在%

时间:2016-04-27 22:20:38

标签: php regex

我的用户输入的文字可能有错误的“令牌”我试图找到使用PHP

有效的“令牌”是以百分号包裹的任意数量的字符 - 所以%blah% %blah_moreblah%。基本上我正在寻找用户可能忘记放置前导或尾随'%'的令牌。我也在寻找有效格式的令牌 - 就在我的代码中,所有可更换的令牌都已被替换。

所以,我正在寻找的3种情况是(借用正则表达式语法):%\w+%\w+%\w+%

在英语中,我正在寻找的是“以%开头的字符串和/或以%结尾且只包含单词字符的字符串

我到目前为止的正则表达式是:(%*\w+%*),但你会注意到它匹配每一个单词。我坚持要做一场比赛要求至少是一个领先或落后的%。

编辑:最初我尝试使用自己的正则表达式找到所有3种情况。但是,我发现在第一种情况下用于查找令牌的正则表达式也会在第二种情况下找到令牌,只是没有尾随的%。例如,/(%\w+)/%before %both%进行检查后,会匹配%before%both

2 个答案:

答案 0 :(得分:2)

要匹配%附带的标记,或两边都有%,请使用

(?=\w*%)%*\w+%*

请参阅another regex demo

这是你的模式,我添加了一个积极的前瞻。 (?=\w*%)仅限于在出现零个或多个字词后出现%的匹配项。

另请注意,%*将匹配零个或多个百分号,它可能与%%%word%%匹配。如果它不是您所需要的,并且您需要匹配1或0 % s,只需将*替换为?量词。

答案 1 :(得分:0)

试试这个:

$input_lines = "Hello this is a %string% with %some_words in it just for demo% purposes.";

preg_match_all("/\s[\w_\-]+%\.?|%[\w_\-]+(%|\s|\.)/", $input_lines, $output_array);

这将输出:

array(
    0   =>  %string%
    1   =>  %some_words 
    2   =>   demo%
)

请注意,这将捕获有效案例以及您正在寻找的拼写错误。