Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 用preg_匹配查找字符串中的短语_Php_String_Preg Match - Fatal编程技术网

Php 用preg_匹配查找字符串中的短语

Php 用preg_匹配查找字符串中的短语,php,string,preg-match,Php,String,Preg Match,我正在逐行搜索文本,希望查看该行是否包含短语“请参阅详细信息”,并且不区分大小写,因此将查找: 见详情,见详情,见详情等 到目前为止,我有这个 if(preg_match("/^(\see details)/", strtolower($line))) { echo 'SEE DETAILS FOUND'; } 一个简单的例子会很有帮助,谢谢。如果您想检查字符串中是否存在子字符串,不需要正则表达式:就可以了: if (stripos(strtolower($line), 'see de

我正在逐行搜索文本,希望查看该行是否包含短语“请参阅详细信息”,并且不区分大小写,因此将查找:

见详情,见详情,见详情等

到目前为止,我有这个

if(preg_match("/^(\see details)/", strtolower($line)))
{
    echo 'SEE DETAILS FOUND';
}

一个简单的例子会很有帮助,谢谢。

如果您想检查字符串中是否存在子字符串,不需要正则表达式:就可以了:

if (stripos(strtolower($line), 'see details') !== false) {
    // 'see details' is in the $line
}

stripos()
将返回子字符串在字符串中第一次出现的位置;如果未找到子字符串,则为
false


这意味着如果它返回的不是
false
,则会找到子字符串。

正如Pascal所说,您可以使用
stripos()
函数,尽管正确的代码是:

if (stripos(strtolower($line), 'see details') !== false) {
    // 'see details' is in the $line
}

你的正则表达式实际上已经坏了

/^(\see details)/
这可分为:

  • 起初
  • 打开一个捕获组
  • 查找一个空白字符
  • 后跟以下所有字符:
    ee details
  • 关闭该组
匹配空格。您还可以添加使正则表达式不区分大小写。你似乎也没有对被抓获的团队做任何事情,所以你可以抛弃它

因此:

/^see details/i
这就是你想要的

您提到您正在逐行检查输入。如果您只需要知道整个输入包含特定字符串,并且您将输入作为字符串,则可以使用
m
修饰符使
^
匹配“行的开头”,而不是/除了“字符串的开头”:

如果是这种情况,那么您将得到:

if(preg_match('/^see details/im', $whole_input)) {
    echo "See Details Found!";
}

但正如其他人所提到的,这里不需要正则表达式。根据php文档(),您可以(也应该)使用更简单的
stripos

来完成这项工作:



它看起来非常简单和漂亮:-)

谢谢,这样做更有意义。第一行应该是if(strpos(strtolower($line),‘see details’)!==false)。哦^^是的,当然:-)很抱歉,忘了键入一半。。。(我已经编辑了我的答案来解决这个问题;谢谢你的评论!)当已经使用不区分大小写的匹配(
stripos
)时,不需要使用
strtolower
if(preg_match('/^see details/im', $whole_input)) {
    echo "See Details Found!";
}
<?php
/* The \b in the pattern indicates a word boundary, so only the distinct
 * word "web" is matched, and not a word partial like "webbing" or "cobweb" */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}

if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}
?>