Php, 正则表达式

标签 php regex

我得到了这个模式(我正在使用 php):

'/\[link\=((https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?)\]/i'

当我搜索这个字符串时:http://phpquest.zapto.org/users/register.php

匹配项为(顺序为0-5):

  1. '[link=http://phpquest.zapto.org/users/register.php]'
  2. 'http://phpquest.zapto.org/users/register.php'
  3. 'http://'
  4. 'phpquest.zapto'
  5. org
  6. ''

当我在最后一个子模式中用 + 替换 * 时:

'/\[link\=((https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]+)*\/?)\]/i'

匹配项为(顺序为0-5):

  1. '[link=http://phpquest.zapto.org/users/register.php]'
  2. 'http://phpquest.zapto.org/users/register.php'
  3. 'http://'
  4. 'phpquest.zapto'
  5. org
  6. '/users/register.php'

如果有人能帮助我理解为什么,我将非常感激,谢谢大家,祝您有愉快的一天。

最佳答案

也许一个更简单的例子是当你比较 thisthis .

涉及的正则表达式有:

(a*)*

(a+)*

测试字符串是aaaaaa

发生的事情是,在捕获主要组(在我提供的示例中,a 的系列)之后,它会尝试匹配更多,但不能。可是等等!也可以什么都不匹配,因为*表示0次或多次!

因此,在匹配所有 a 之后,它将匹配并捕获 'nothing',并且由于只存储了最后捕获的部分,因此捕获组的结果是 ''。

(a+)*中,匹配和捕获aaaaaa后,它不能再匹配或捕获任何东西(+阻止它匹配任何东西,而不是 *),因此,aaaaaa 是最后一场比赛。

关于Php, 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085386/

相关文章:

PHP & RSS 提要和特殊字符验证问题

java - 如何从字符串中删除回车符

python - 使用正则表达式验证电话号码并将其解析为 3 个值

javascript - 如何使用 JavaScript 正则表达式向文本添加标记

python - 如何使用正则表达式用空格替换字符之间的破折号

javascript - 正则表达式捕获组到大写

php - Require_once PHP 错误

php - 给定背景颜色,黑色或白色文本?

使用自动故障转移时 PHP MongoDB 错误

php - Laravel:动态连接数据库