【问题标题】:why is this regular expression is not working so well [closed]为什么这个正则表达式不能很好地工作[关闭]
【发布时间】:2020-09-14 16:59:37
【问题描述】:

如果字符串遵循某种模式,我尝试创建一个返回 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

【问题讨论】:

  • 您的模式是 ^.*144.*$,它不会匹配 14 或 44。您想匹配 2 位数字,其中模式至少接受 3 位数字。
  • 你尝试过什么调试问题?
  • 如果你想匹配 14、44 或 144 试试^(?:1?44|14)$

标签: php regex preg-match str-replace


【解决方案1】:

您的 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;
?>

【讨论】:

    【解决方案2】:

    您为什么不使用strpos 进行简单匹配?

    <?php
    
    function like_match($haystack, $needle){
        return (strpos($needle, $haystack) !== false);
    }
    
    $name="144";
    $keywordd="14";
    
    $ch=like_match($keywordd,$name);
    
    var_dump($ch);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2020-04-26
      相关资源
      最近更新 更多