Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么这个正则表达式不能很好地工作_Php_Regex_Preg Match_Str Replace - Fatal编程技术网

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}$/

我试图使一个函数在字符串遵循某种模式时返回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}$/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)$