正则表达式匹配特定的字符,不匹配另一个字符

时间:2016-01-11 09:32:31

标签: regex negative-lookahead

我有一个像这样的文件,我想匹配一些字符串:

https://site.me/ //matches
https://site.me// //does not match (there is a slash)
https://site.me/deck //does not match (there is not a dot)
https://site.me/hello.php //matches (there is a dot and zero slashes)
https://site.me/deck/hello.php //does not match (there is a slash)

模式应为:https://site.me/后跟任何斜杠不匹配。接下来是一个点而不是斜线匹配。其次是任何没有点的字符都不匹配。

以下是my try

https://site.me/((?!/).)*$

4 个答案:

答案 0 :(得分:1)

看起来你过度复杂了。

这符合您所描述的要求:

 ^https://site.me/([^/.]*\.[^/.]*)?$

但是真正的要求(不是你写的那个)可能更复杂。例如,您可能不想要空格,并且您不想要一个点。这是一个可能更好的解决方案

 ^https://site.me/([^/.\s]+\.[^/.\s]+)?$

答案 1 :(得分:1)

只需匹配网址后的任何可选文件名:

^https://site\.me/([^/]+\.[^/]+)?$
  • [^/]+/一次或多次匹配任何内容(称之为X
  • [^/]+\.[^/]+匹配X.X
  • ?使整个文件名部分可选

Try it out live here

答案 2 :(得分:0)

您可以使用此正则表达式:

^https://site\.me/([^/.]+\.[^/]+)?$

RegEx Demo

([^/.]+\.[^/]+)?https://site.me/可选后加入。但是如果输入则必须有一个DOT。

答案 3 :(得分:0)

这对我有用

/^https://site\.me/([^\/]+.*?\.php)?$/