Php 为什么这个正则表达式不能很好地工作
我试图使一个函数在字符串遵循某种模式时返回true 下面是PHP代码Php 为什么这个正则表达式不能很好地工作,php,regex,preg-match,str-replace,Php,Regex,Preg Match,Str Replace,我试图使一个函数在字符串遵循某种模式时返回true 下面是PHP代码 <?php function patternn($p) { $p="%".$p."%"; return $p; } function like_match($pattern, $subject) { $pattern = str_replace('%', '.*', preg_quote($pattern, '/')); $result=preg_match("/^{$pattern}$/
<?php
function patternn($p)
{
$p="%".$p."%";
return $p;
}
function like_match($pattern, $subject)
{
$pattern = str_replace('%', '.*', preg_quote($pattern, '/'));
$result=preg_match("/^{$pattern}$/i", $subject);
return $result;
}
$name="144";
$keywordd="14";
$pa=patternn($name);
$ch=like_match($pa,$keywordd);
echo $ch;
?>
当$name=144且$keywordd为144或144之前和之后的任何内容时,返回true
但是当$keywordd为14或44时,我希望函数返回true,为什么不使用
strpos
进行简单匹配
<?php
function like_match($haystack, $needle){
return (strpos($needle, $haystack) !== false);
}
$name="144";
$keywordd="14";
$ch=like_match($keywordd,$name);
var_dump($ch);
为什么不使用strpos
进行简单匹配
<?php
function like_match($haystack, $needle){
return (strpos($needle, $haystack) !== false);
}
$name="144";
$keywordd="14";
$ch=like_match($keywordd,$name);
var_dump($ch);
您的RegExp模式正常。只是一些逻辑问题
<?php
function patternn($p)
{
$p="%".$p."%";
return $p;
}
function like_match($pattern, $subject)
{
$pattern = str_replace('%', '.*', preg_quote($pattern, '/'));
$result=preg_match("/^{$pattern}$/i", $subject);
return $result;
}
$name="144";
$keywordd="14";
// Corrected
$pa=patternn($keywordd);
// Corrected
$ch=like_match($pa,$name);
echo $ch;
?>
您的RegExp模式正常。只是一些逻辑问题
<?php
function patternn($p)
{
$p="%".$p."%";
return $p;
}
function like_match($pattern, $subject)
{
$pattern = str_replace('%', '.*', preg_quote($pattern, '/'));
$result=preg_match("/^{$pattern}$/i", $subject);
return $result;
}
$name="144";
$keywordd="14";
// Corrected
$pa=patternn($keywordd);
// Corrected
$ch=like_match($pa,$name);
echo $ch;
?>
您的模式是^.*144.*$
,与14或44不匹配。您希望匹配2个数字,其中模式至少接受3个数字。您试图调试问题的原因是什么?如果您希望匹配14、44或144,请尝试^(?:1?44 | 14)$
您的模式是^.*144.*$
,它将与14或44不匹配。您希望匹配2个数字,其中模式至少接受3个数字。您试图调试问题的原因是什么?如果要匹配14、44或144,请尝试^(?:1?44 | 14)$