Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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_match_all()_Php - Fatal编程技术网

Php 无法理解preg_match_all()

Php 无法理解preg_match_all(),php,Php,这个问题已经有一个重复的问题了 我无法在那里创建评论,所以我正在创建一个新的 提供的解决方案非常具有解释性,但我仍然无法清楚地了解preg_match_all 我尝试了以下代码 结果是 我的理解是正则表达式只会根据我的代码选择以开头的字符串 但是在结果中,数组包含带和不带的字符串 请帮我弄清楚。我遗漏了什么。我的理解是正则表达式只会根据我的代码选择以开头的-这是因为您的理解是错误的。您需要将字符串^的开头添加到它的前面/^+[a-zA-Z0-9_]+/i插入符号“^”在字符组之外[…]表示匹配字

这个问题已经有一个重复的问题了 我无法在那里创建评论,所以我正在创建一个新的

提供的解决方案非常具有解释性,但我仍然无法清楚地了解preg_match_all

我尝试了以下代码

结果是

我的理解是正则表达式只会根据我的代码选择以开头的字符串

但是在结果中,数组包含带和不带的字符串


请帮我弄清楚。我遗漏了什么。

我的理解是正则表达式只会根据我的代码选择以开头的-这是因为您的理解是错误的。您需要将字符串^的开头添加到它的前面/^+[a-zA-Z0-9_]+/i插入符号“^”在字符组之外[…]表示匹配字符串/行的开头。在[^0-9]中表示“不”,这很混乱。但这就是它的工作原理。此外,您还可以将[a-zA-Z0-9_]替换为相同的\w。这里的i标志是没有意义的,不区分大小写,因为有大写和小写。在第一个数组中有整个regexp的结果。在下一个数组中,有您案例中每个括号的结果[a-zA-Z0-9_]+。请查看副本中有关组的部分。您的[0]数组元素匹配整个正则表达式,即+[a-zA-Z0-9\]+=>['test','php'],而[1]元素只匹配整个正则表达式的内容,即[a-zA-Z0-9\]+=>['test','php'],当然,正则表达式可能非常混乱。经过几年的努力,我现在在这方面做得相当好,尽管环顾四周的人偶尔也会让我感到惊讶。正则表达式非常强大,因此值得学习。这是一个好的测试站点,主要是因为您可以保存您的内容,并且它内置了文档和一个很棒的正则表达式解析器。从PHP的角度来看,它并没有做所有正确的事情,例如没有preg\u match\u all,但您可以接近它。它跳过了它们,因为缺少空格和a\s。您的代码所做的是匹配任何以a开头并后跟a-z、a-z、0-9或z的部分。没有空格。我的理解是正则表达式只会根据我的代码选择以开头的-这是因为你的理解是错误的。您需要将字符串^的开头添加到它的前面/^+[a-zA-Z0-9_]+/i插入符号“^”在字符组之外[…]表示匹配字符串/行的开头。在[^0-9]中表示“不”,这很混乱。但这就是它的工作原理。此外,您还可以将[a-zA-Z0-9_]替换为相同的\w。这里的i标志是没有意义的,不区分大小写,因为有大写和小写。在第一个数组中有整个regexp的结果。在下一个数组中,有您案例中每个括号的结果[a-zA-Z0-9_]+。请查看副本中有关组的部分。您的[0]数组元素匹配整个正则表达式,即+[a-zA-Z0-9\]+=>['test','php'],而[1]元素只匹配整个正则表达式的内容,即[a-zA-Z0-9\]+=>['test','php'],当然,正则表达式可能非常混乱。经过几年的努力,我现在在这方面做得相当好,尽管环顾四周的人偶尔也会让我感到惊讶。正则表达式非常强大,因此值得学习。这是一个好的测试站点,主要是因为您可以保存您的内容,并且它内置了文档和一个很棒的正则表达式解析器。从PHP的角度来看,它并没有做所有正确的事情,例如没有preg\u match\u all,但您可以接近它。它跳过了它们,因为缺少空格和a\s。您的代码所做的是匹配任何以a开头并后跟a-z、a-z、0-9或z的部分。没有空间。
preg_match_all("/#+([a-zA-Z0-9_]+)/i","#test this is #php test",$matches);

var_dump($matches)
array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(5) "#test"
    [1]=>
    string(4) "#php"
  }
  [1]=>
  array(2) {
    [0]=>
    string(4) "test"
    [1]=>
    string(3) "php"
  }
}