我仍然在学习很多关于PHP的知识,字符串变化是我感兴趣的东西。我之前使用过preg_match来验证电子邮件地址或者只是查询查询。preg_match_all()如何处理字符串?
我刚刚从这篇文章What's wrong in my regular expression?来,很好奇为什么preg_match_all函数产生2个字符串,1个/一些字符被剥离,然后另一个w /所需的输出。
从我对函数的理解中可以看出,它使用RegEx来逐个字符地检查字符串以评估如何处理它。这个RegEx的结构是否可以绕过第一个数组入口并产生所需的结果?
,所以你不必去其他线程
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
[email protected]~';
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>';
}
这将输出
^强尼〜
^史密斯〜
^[email protected]~
强尼
史密斯
[email protected]
我很好奇,如果2数组项的原因是由于该字符串的原始sytax或如果它是该函数的正常处理响应。对不起,如果这不应该在这里,但我真的很好奇这是如何工作的。
感谢, 布罗迪
输出将始终包含整个匹配项和表达式中每个捕获组的条目。 –
不是一个答案,但有趣的是这里需要注意'PREG_SET_ORDER'标志,它将返回一个更简单的结果列表。虽然你不能删除整个匹配的'[0]'数组项,你可以在正则表达式中使用'\ K'来去除它的内容。 – mario