正则表达式通过精确的单词长度匹配单词

时间:2019-11-03 09:19:13

标签: php regex preg-match

我想匹配一个正则表达式中定义的确切长度的单词。如果单词超过或低于此限制,则应不匹配

例如

  

您好,匹配此C90.083635。 11个字符长的单词不是C90.083635.73G   因为它超过11个字符而不是C90.08363因为不是11个字符   字符长。

尝试过此^.{11}$\b^,但它匹配的单词是11个字符的大于11或小于或等于的字符

第二个问题,请提供正则表达式帮助,该正则表达式匹配以特定字符开头并以 .00 结尾的单词,例如VT500.00

1 个答案:

答案 0 :(得分:2)

对于您尝试过的模式,您使用的锚点^声明字符串的开始,而$声明结束的字符串$。如果您不想匹配空格,可以使用\S代替.

您可以做的是将11个非空白字符匹配,并检查它是否不被非空白字符包围。

(?<!\S)\S{11}(?!\S)

Regex demo | Php demo

例如

$re = '~(?<!\S)\S{11}(?!\S)~';
$str = 'Hello match this C90.083635. 11 character long word not C90.083635.73G because it exceed 11 character and not C90.08363 because is not 11 character long.';

preg_match_all($re, $str, $matches);
print_r($matches[0]);

输出

Array
(
    [0] => C90.083635.
)

第二部分的一个选项可能是利用单词边界\b并使用\S+来匹配1倍以上的非空白字符。

\bV\S+\.00\b

Regex demo