匹配字符串中的确切数字(并且在更大的数字中没有部分匹配)

时间:2016-09-12 11:28:11

标签: php regex

我想匹配字符串中的确切数字。例如,我搜索"123"并希望在"123", "asdf123x", "99 123"中匹配它,但如果它只是在"更大的"中的部分匹配则匹配。数。所以它不匹配"0123", "1234", "123123"

因为" asdf123x"我不能使用单词边界。 我试图从这样一个消极的前瞻开始(并且计划在后面添加一个负面的外观,但即使是它自己的前瞻也不会像我想的那样起作用:

$string = "123"; //or one of the other examples   
preg_match('/(?!\d)123/',$string,$matches);

这永远不会匹配,我不明白为什么。

1 个答案:

答案 0 :(得分:2)

你需要负面的后视和前瞻:

'/(?<!\d)123(?!\d)/'
  ^^^^^^^   ^^^^^^

请参阅regex demo

如果(?<!\d)之前有一位数字,那么负面的后方123将失败,如果123之后有一位数字,那么否定前瞻将使匹配失败。

详细了解negative lookarounds here

PHP demo

$string = "123"; //or one of the other examples   
if (preg_match("/(?<!\d)$string(?!\d)/", "123123",$matches)) {
    echo "Matched!";
} else {
    echo "Not matched!";
}