这个正则表达式匹配什么样的字符串?

时间:2010-10-11 09:42:44

标签: regex

请举例说明符合此正则表达式的文字:

root/(.+)-go-to-products.php

2 个答案:

答案 0 :(得分:5)

匹配任何字符串root/后跟一个或多个字符,而不是换行符后跟-go-to-products后跟任意一个字符(除了换行符)后跟php,这些字符串可以在字符串中出现任何地方

它会匹配:

root/f-go-to-products.php
root/foo-go-to-products.php
root/foo-go-to-products.php5     # Because you are not using anchor
http://stackoverflow.com/questions/3905066?root/f-go-to-products.php # no anchor
root/../foo-go-to-products.php   # . can match a literal . and /

以及

root/foo-go-to-products-php      # because . is a meta char.

但不是

root/-go-to-products.php         # because .+ expects at least 1 char.

要匹配.之前的php字面上将其视为:root/(.+)-go-to-products\.php

此外,如果您正在使用正则表达式进行匹配,并且您不想提取.+匹配的内容,则可以删除括号并使用:

root/.+-go-to-products\.php

为了确保在找到模式作为子字符串时不会发生匹配,您应该锚定为:^root/.+-go-to-products\.php$

由于.与文字./匹配,因此您的正则表达式可以匹配潜在危险的输入,例如:root/../bar/foo-go-to-products.php。在此输入中,php文件foo-go-to-products.php不存在于root目录中,但存在于root/../bar目录中,该目录是bar目录,与root处于同一级别}。

答案 1 :(得分:4)

它将匹配包含“root /”的所有内容,后跟一些内容,后跟“-go-to-products”,后跟一个字符,后跟“php”。

root/a-go-to-products.php //Okay
root/a-go-to-products.ph  //Not okay
a-go-to-products.phproot/ //Not okay
root/-go-to-products.php  //Not okay
root/a-go-to-products php //Okay

您可能想要转义最后一个.,以便仅捕获点字符。

root/(.+)-go-to-products\.php

资源: