我想匹配字符串中的确切数字。例如,我搜索"123"
并希望在"123", "asdf123x", "99 123"
中匹配它,但如果它只是在"更大的"中的部分匹配则匹配。数。所以它不匹配"0123", "1234", "123123"
。
因为" asdf123x"我不能使用单词边界。 我试图从这样一个消极的前瞻开始(并且计划在后面添加一个负面的外观,但即使是它自己的前瞻也不会像我想的那样起作用:
$string = "123"; //or one of the other examples
preg_match('/(?!\d)123/',$string,$matches);
这永远不会匹配,我不明白为什么。
答案 0 :(得分:2)
你需要负面的后视和前瞻:
'/(?<!\d)123(?!\d)/'
^^^^^^^ ^^^^^^
请参阅regex demo。
如果(?<!\d)
之前有一位数字,那么负面的后方123
将失败,如果123
之后有一位数字,那么否定前瞻将使匹配失败。
详细了解negative lookarounds here。
$string = "123"; //or one of the other examples
if (preg_match("/(?<!\d)$string(?!\d)/", "123123",$matches)) {
echo "Matched!";
} else {
echo "Not matched!";
}