preg_match_all()如何处理字符串?

Bro*_*die 5 php regex preg-match-all

我还在学习很多关于PHP的知识,字符串更改是我感兴趣的东西.我之前使用过preg_match来验证电子邮件地址或只搜索查询.

我刚从这篇文章中发表我的正则表达式有什么问题?并且好奇为什么preg_match_all函数产生2个字符串,1 w /一些字符被剥离,然后另一个带有所需的输出.

根据我对该函数的理解,它使用RegEx来逐字符串地逐字符号来评估如何处理它.这个RegEx的结构是否可以绕过第一个数组条目并产生所需的结果?

所以你不必去另一个线程

$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
        free@wpdevelop.com~';

preg_match_all('/\^([^^]*?)\~/', $str, $newStr);

for($i=0;$i<count($newStr[0]);$i++)
{
    echo $newStr[0][$i].'<br>';
}

echo '<br><br><br>';

for($i=0;$i<count($newStr[1]);$i++)
{
    echo $newStr[1][$i].'<br>';
} 
Run Code Online (Sandbox Code Playgroud)

这将输出

^乔尼斯〜
^史密斯〜
^example-free@wpdevelop.com~


强尼
·史密斯
example-free@wpdevelop.com

我很好奇,如果2个数组条目的原因是由于字符串的原始sytax或者它是函数的正常处理响应.对不起,如果这不应该在这里,但我真的很好奇这是如何工作的.

谢谢,布罗迪

Mar*_*c B 2

这是 preg_match 和 preg_match_all 的标准行为 - “匹配值”数组中的第一个字符串是正则表达式模式捕获的完整字符串。()随后的数组值是“捕获组”,其存在取决于正则表达式模式中对的放置/位置。

在您的正则表达式的情况下,/\^([^^]*?)\~/完整的匹配字符串将是

^   Jony    ~
|     |     |
^  ([^^]*?) ~   -> $newstr[0] = ^Jony~
                -> $newstr[1] = Jony (due to the `()` capture group).
Run Code Online (Sandbox Code Playgroud)