检查特定字符串是否存在而不考虑空格或任何换行符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查特定字符串是否存在而不考虑空格或任何换行符相关的知识,希望对你有一定的参考价值。

我想检查内容中是否存在特定字符串,而不考虑空格差异或换行符。

情况1

  • 输入字符串:this is a sample test
  • 检查一词:asample test

案例2

  • 输入字符串:sample test1 \n new line content
  • 检查一词:test1 new
答案

在检查字符串是否包含模式之前,您可以使用以下逻辑从模式字符串和要分析的字符串中删除所有空格字符。

原型:

$input1='this is a sample test';
$inputFiltered1= str_replace('\s', '', $input1);
$pattern1='asample test';
$patternFiltered1= str_replace('\s', '', $pattern1);

$input2='sample test1 \n new line content';
$inputFiltered2= str_replace('\s', '', $input2);
$pattern2='test1 new';
$patternFiltered2= str_replace('\s', '', $pattern2);

if (strpos($inputFiltered1, $patternFiltered1) !== false) 
    echo 'true';


if (strpos($inputFiltered2, $patternFiltered2) !== false) 
    echo 'true';

另一答案

方法#1:纯正的正则表达式,$input未经修改

$pattern='~'.preg_replace('~\S(?!$)\K\s*~','\s*',$check).'~';
if(preg_match($pattern,$input))
    echo "Found: $check";
else
    echo "Did Not Find: $check";

方法#2:$input$check的正则表达式修改

if (strpos(preg_replace('~\s+~', '', $input), preg_replace('~\s+~', '', $check))!==false)
    echo "Found: $check";
else
    echo "Did Not Find: $check";

方法#3:$input$check的无正则修饰

$whitechars=[' ',"\t","\r","\n"];  // hardcode whitespace characters
if (strpos(str_replace($whitechars, '', $input), str_replace($whitechars, '', $check))!==false)
    echo "Found: $check";
else
    echo "Did Not Find: $check";

(Qazxswpoi)

现在,您可能会问:“我应该为项目选择哪一个?”

正确回答将首先取决于您的Demonstrations Link数据的大小和内容,然后是您运行此片段的次数,然后是个人偏好,可能最不重要的是$input的大小和内容。

  1. 如果您的$check数据相对较大,那么您将希望避免对字符串执行任何修改,因为它会影响速度。假设您的$input字符串通常非常小,单独修改此值将导致执行时间产生最小的“拖动”。作为一般答案,我建议方法#1;虽然它使用两个$check调用,但它们正在处理一个非常小的字符串。我应该解释一下,方法#1只通过在所有可见字符之间放置preg_来准备$check值。如果字符串中有任何空白字符,则在模式准备期间将其删除(假设\s*中没有前导或尾随空白字符 - 否则,请调用$check或精简模式准备)。 (trim()
  2. 如果你想通过删除所有出现的空格字符来准备Method #1 Pattern Demo$input,那么最直接的方法是在一个或多个$check字符上调用preg_replace()并用空字符串替换(方法#2)。这将告诉正则表达式引擎隔离空格的子串并通过给定字符串的“单次扫描”删除它们。相比之下,如果要避免使用正则表达式函数,可以使用\s执行相同的任务。但是,使用方法#3意味着您需要单独“通知”要删除的所有字符的功能。 str_replace()不知道str_replace()的意思。不幸的是,通过在数组中列出空白字符,该函数将执行字符串的\s“迭代扫描”并且它一次只能替换一个字符。

要结晶,如果你有一个包含n的字符串,那么a[space][newline][newline][tab][space]b将扫描字符串一次并进行一次替换。如果你在相同的字符串上调用preg_replace(),它将进行四次扫描(记住:str_replace())并进行五次单独的替换。

我想我正在开车回家的信息是:正则表达式有时会得到一个糟糕的说唱,但这似乎是一个令人信服的案例,选择一个非正则表达式方法的正则表达式方法(除非你对实际项目进行基准测试并发现正则表达式方法实际上是对绩效产生负面影响)。

以上是关于检查特定字符串是否存在而不考虑空格或任何换行符的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串(句子空格分隔)以查看它是不是包含数组中的任何字符

如何使用 C# 在给定文本中用忽略空格、回车或换行符替换字符串

如果在文件末尾省略PHP块的结束标记,是否会删除任何换行符或空格(如果存在于相应的文件中)?

无视空格的字符串的 Jest 相等匹配器

如何在熊猫数据框中对字符串进行排序或检查等效性而不考虑顺序?

用于检查值是否在列表中不适用于集合的逻辑