请举例说明符合此正则表达式的文字:
root/(.+)-go-to-products.php
答案 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
资源: