正则表达式用于以%包装的匹配令牌


Regex for matching token wrapped in %

我有用户输入的文本,其中包含可能输入错误的"标记",我试图使用 PHP 查找

有效的"标记"是用百分号括起来的任意数量的单词字符 - 所以%blah% %blah_moreblah%. 基本上,我正在寻找用户可能忘记放置前导或尾随"%"的令牌。 我也在寻找有效格式的令牌 - 在我的代码中,所有可替换的令牌都已被替换。

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

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

到目前为止,我拥有的正则表达式是:(%*'w+%*),但您会注意到它与每个单词都匹配。 我坚持让比赛至少需要一个前导或尾随%。

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

要匹配用 % 括起来的标记,或者在两侧都有%,请使用

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

查看另一个正则表达式演示。

这是我添加的积极展望的模式。(?='w*%)仅限于在零个或多次出现单词字符后出现%的此类匹配项。

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

试试这个:

$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%
)

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