正则表达式:页面路径以“/ posts /”开头,以“.html”结尾

时间:2013-12-31 18:27:03

标签: regex perl

我被困在这里:

=~^/posts/(*).html

但它不起作用

我需要能识别出类似内容的东西:

/posts/testing.html

/posts/another-testing-issue.html

我使用RegEx并不是很好

有人可以帮我吗?

编辑:

Floris有正确的答案:

^/posts/.*html$
谢谢你!

3 个答案:

答案 0 :(得分:2)

简而言之,您需要的表达是

^\/posts\/.*\.html$

说明:

^          start of string
\/posts\/  literal string '/posts/' 
           the backslash "protects" the forward slash -
           it is called "escaping", and removes any special meaning it might have
           (in some applications the / would be a delimiter)                        
.*         any number of characters
\.         literal '.'
html       literal 'html'
$          end of string

现在有关正则表达式语法的更多背景信息...... 一个 s @Peter在评论中指出,quantifier跟随"要量化的东西"。在大多数(全部?)正则表达式语法中,编写(*)将生成错误preceding token is not quantifiable。您需要*前面的内容,并且(不会计算(除非它被转义)。

这就是点的来源。点.表示"任何字符. That is its usual meaning, which is why。*`只是正则表达式中最常见的东西,意思是&#34 ;我不在乎下一点......" (通常最多为"直到" - 无论如何)。

因为点具有特殊含义,所以当你需要精确的字符串.html时,你需要把它写成\.html(那里再次使用反斜杠来删除特殊含义)点)。

作为最后的调整,有一个像.htm这样的扩展并不罕见 - 所以你可以把你的表达写成

\/posts\/.*\.html?$

这将使最后一个字符l成为可选(?表示"前面的表达式的零或一次,在这种情况下是紧接在它之前的单个字符)

你可以在http://regex101.com/r/bK5yC7看到这个 - 这是一个很好的探索正则表达式的工具,并且给出了你输入的每个表达式的一个很好的解释(细分)(突出显示任何错误)

答案 1 :(得分:1)

你错过了一个dot作为单个字符匹配,并没有逃脱第二个作为文字:

^/posts/(.*)\.html

答案 2 :(得分:0)

在大多数正则表达式中。表示任何字符,*表示多重性,因此请尝试修复

^/posts/(.*)\.html

\是转义字符