PHP preg_match与搜索的字符串不完全匹配
如何在字符串中准确地找到字符串? 我的代码似乎不起作用:PHP preg_match与搜索的字符串不完全匹配,php,preg-match,string-matching,Php,Preg Match,String Matching,如何在字符串中准确地找到字符串? 我的代码似乎不起作用: if ( preg_match("/\b" . $needle . "\b/", $string) ) return 'has-error'; 鉴于此值: $string = 'Sub-Category is required.'; $needle = 'Category'; 它返回为TRUE。它应该是假的,因为我要找的是“类别”这个词。虽然单词本身在字符串中,但它仍然不被认为是它 谢谢 尝试使用此正则表达式: "/".$ne
if ( preg_match("/\b" . $needle . "\b/", $string) )
return 'has-error';
鉴于此值:
$string = 'Sub-Category is required.';
$needle = 'Category';
它返回为TRUE。它应该是假的,因为我要找的是“类别”这个词。虽然单词本身在字符串中,但它仍然不被认为是它
谢谢 尝试使用此正则表达式:
"/".$needle."/i"
因此,代码将是:
if ( preg_match("/" . $needle . "/i", $string) )
return 'has-error';
我不确定我是否正确理解了你的问题。但是,当我答对后,您想测试字符串
$string
是否与$pinder
完全相同(不区分大小写)?如果是这样,我建议使用以下代码:
function isAeuqalB($string,$needle) {
if(preg_match("/^".$needle."$/i",$string)) {
return true;
}
return false;
}
isAeuqalB("Category","Category"); // returns true
isAeuqalB("Sub-Category","Category"); // returns false
您的错误是您错过了^
和$
,其中指定$string
从开始到结束需要与$pinder
相同
您的代码只检查单词类别
是否是$string
的一部分
一个很好的网站来检查你的is。我找到了答案
if ( preg_match("/\b[^\-]" . $needle . "/", $validationErrors) )
return 'has-error';
在PHP中,单词边界(\b
)与单词字符(\w
)变为非单词字符(\w
)的位置相匹配。字母被认为是单词字符,而-
是非单词字符。因此,字符串子类别
中有四个单词边界:字符串的开头、字符的前面、后面以及字符串的结尾
要回到您的问题,preg_match
首先与$string
的Sub
部分匹配(失败),然后继续并尝试与字符串的类别
部分匹配(成功)。因此,preg_match
返回TRUE
,如:match found
为了避免这种情况,您必须手动创建单词边界,例如:
preg_match("(^|[^\w-])" . $needle . "([^\w-]|$)/", $string)
在上面的示例中,我们手动将单词边界定义为
NOT(单词char或破折号)
,同时考虑字符串开头/结尾发生匹配的可能性。不确定这是否与问题有关,但是你通常应该在正则表达式中使用变量。你想知道单词Category
是否在$string
中,或者$string
是否等于Category
?我想知道$string是否等于Category。如果你只想要相等,为什么不使用类似strtower($needle)的东西呢==“category”
?这是因为$string可能包含不同的值,如果$pinder在$string中匹配,则应返回TRUE。这适用于此codezombie。我通过添加[^\-]解决了这个问题。嘿@user1781041-因为我仍然不确定我是否正确回答了您的问题,我只是想让您知道,您当前的正则表达式(“/\b[^\-]NEEDLE/”)也将返回TRUE
字符串,如这是一个类别
-哦,我错了!我不太理解您的问题…您的解决方案适合您的具体情况,可能这一个更一般:“/\b[^[\S]]”$pinder。“\b/I”