URL正则表达式建议

时间:2018-07-10 13:46:19

标签: regex

我需要使用多个登陆页面来使用Google的A / B测试工具,但是URL的命名意味着我需要使用正则表达式。

我需要一个仅与以下网址匹配的规则:

domain.com/advertorial

但不匹配:

domain.com/advertorial/version1 (could be version5 10 100 etc)

我们正在针对版本目录对advertorial目录中的索引文件进行测试。

问题在于,不同的供应商会在URL中添加参数,并可能在末尾添加/。

我保存了一个正则表达式测试:https://regex101.com/r/Ra318C/2

我们需要一种方法来说明URL仅包含以下内容:

  • 广告
  • 广告/
  • advertorial?param = etc
  • advertorial /?param = etc

但是如果网址中有额外的目录,例如

domain.com/advertorials/version1

谢谢。

5 个答案:

答案 0 :(得分:1)

您可以使用RegEx domain\.com\/advertorial(?:\/(?:\?[^\/]*)?$)?[^\/]*$

  • domain\.com\/advertorial偶尔与domain.com/advertorial匹配

  • (?:\/(?:\?[^\/]*)?$)?包括您的网址以advertorial/

  • 结尾的情况
  • [^\/]*匹配/之外的0次或多次匹配

  • $确保您在字符串的结尾

Demo.

答案 1 :(得分:0)

别想太多!

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

^domain\.com\/advertorial\/?(\?.*)?$

Try it Online!


说明:

  • ^:字符串的开头
  • domain\.com\/advertorial:定位主要URL(domain.com/advertorial)
  • \/?:可选的反斜杠
  • (\?.*)?:可选查询字符串
  • $:字符串的结尾

答案 2 :(得分:0)

正则表达式:

/domain\.com\/advertorial[\/]?(?:$|\?.*$)/

输入测试字符串:

domain.com/advertorial/version1?test=true
domain.com/advertorial/version1
domain.com/advertorial
domain.com/advertorial?test=true
domain.com/advertorial/
domain.com/advertorial/?test=true

(仅末4个匹配)

请参见regex online test

一些必要的解释

我将非捕获组 OR |符号)一起使用,条件是:

(?:$|\?.*$)

匹配所需网址后的内容:
-是否将其作为URL的结尾($符号)
-或以?符号开头的URL参数。

答案 3 :(得分:0)

您可以尝试

[a-z\-]{2,}\.[a-z]{2,}\/[a-z0-9\-]+\/?(\?[a-zA-Z0-9\=]*)*$

https://regex101.com/r/o1hQT4/2

处检查测试用例

答案 4 :(得分:0)

您可以使用:

domain\.com\/advertorial\/?(?:\?[^\/]+)?$

说明

  • domain\.com\/advertorial匹配domain.com/advertorial
  • \/?匹配可选的正斜杠
  • (?:非捕获组
    • \?匹配可选的问号
    • [^\/]+一次或多次不匹配正斜杠
  • )?关闭非捕获组并将其设置为可选
  • $声明行的结尾

    Regex demo