我被困在这里:
=~^/posts/(*).html
但它不起作用
我需要能识别出类似内容的东西:
/posts/testing.html
/posts/another-testing-issue.html
我使用RegEx并不是很好
有人可以帮我吗?
编辑:
Floris有正确的答案:
^/posts/.*html$
谢谢你!
答案 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
\是转义字符