【发布时间】:2013-11-22 13:11:15
【问题描述】:
我正在尝试匹配以下字符串:
controller1/action1/something
使用以下正则表达式:
(?P<controller>[[:alnum:]]+)/(?P<action>[[:alnum:]]+)/(.*)
由于某种原因,它没有找到字符串的最后一部分:something。但是当我在正则表达式末尾将* 更改为+ 时,它会起作用:
(?P<controller>[[:alnum:]]+)/(?P<action>[[:alnum:]]+)/(.+)
使用该正则表达式,它确实找到了something 字符串。但我想使用.*(或.*?),因为我希望这个正则表达式在它最后没有任何东西时也能成功。
所以当字符串为:controller1/action1/时也应该成功
那么为什么它不能与(.*) 或(.*?) 一起使用而与.+ 一起使用呢?区别应该只是第一个说“零个或多个字符”,最后一个说“一个或多个”。我只是想检查“零个或多个”。
PS。由于更复杂的问题,我不想使用^ 和$ 来表示字符串的开头和结尾。简单地说,这种模式并不总是出现在结尾的字符串中。
【问题讨论】:
-
看起来对我有用:Demo
-
它也适用于我,Another Demo。
-
也许发布您的 PHP 代码,以及您正在测试的完整输入字符串的示例
标签: php regex preg-match pcre