Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式解析URL(可选跟踪代码和哈希)_Regex_Url - Fatal编程技术网

Regex 使用正则表达式解析URL(可选跟踪代码和哈希)

Regex 使用正则表达式解析URL(可选跟踪代码和哈希),regex,url,Regex,Url,我有很多想解释的场景,但似乎无法确定我的匹配字符串(#regex初学者)。不幸的是,没有JavaScript是可能的,因为这个正则表达式正在Adobe Analytics的分类规则生成器中使用 我要找的是三组人: 基本URL(不包括http[s]:\/\/www.) 跟踪代码(在?之后,但在#之前) 散列(在#之后的所有内容) 问题是,跟踪代码和散列是可选的。两者都可能出现,其中一个可能出现,或者没有一个出现。URL中也不能存在多个跟踪代码或多个哈希,并且哈希将永远不会出现在跟踪代码之前 到目前

我有很多想解释的场景,但似乎无法确定我的匹配字符串(#regex初学者)。不幸的是,没有JavaScript是可能的,因为这个正则表达式正在Adobe Analytics的分类规则生成器中使用

我要找的是三组人:

  • 基本URL(不包括http[s]:\/\/www.)
  • 跟踪代码(在?之后,但在#之前)
  • 散列(在#之后的所有内容)
  • 问题是,跟踪代码和散列是可选的。两者都可能出现,其中一个可能出现,或者没有一个出现。URL中也不能存在多个跟踪代码或多个哈希,并且哈希将永远不会出现在跟踪代码之前

    到目前为止,我的目标是:
    ^http[s]:\/\/www.(.+\/.+)\?(.+)?#(.+)?
    如果同时存在跟踪代码和散列,那么这种方法可以很好地工作,但是如果其中一个或两个都不存在,那么这种方法就不起作用

    下面是我的测试用例。他们都需要返回三个组,但我知道组2和/或组3可能是空的

    • ?
    任何帮助都将不胜感激。对一个有点经验的人来说这应该很容易

    谢谢,
    Chris

    这似乎是个好办法,匹配您上面的所有测试用例:

    ^https:\/\/www\.([^?#\s]+)(\?[^\s#]*)?(#.*)?
    
    • 第1组是
      https://wwww.
      最多可使用
      #
    • 组2是可选的,匹配
      #
      之后的任何字符
    • 组3是可选的,与
      #
      和后面的任何字符匹配
    使用示例
    https://www.example.com/en-US/tires/wrangler-duratrac?sku=150638601#121

    • 第1组=
      example.com/en-US/tires/wrangler-duratrac
    • 第2组=
      ?sku=150638601
    • 第三组=
      #121
    对于
    https://www.example.com/en-US/tires/wrangler-duratrac#121

    • 第1组=
      example.com/en-US/tires/wrangler-duratrac
    • 第2组为空
    • 第三组=
      #121

    可能的重复:不要重新发明轮子,用它来完成工作!你需要匹配所有的案例吗?或者你有跟踪代码或散列吗?大家好,谢谢你的参与。我只是想澄清一下,我在找3个小组,虽然有时我知道这些小组可能是空的。对于我的上一个测试用例g1=example.com/en-US/tires/wrangler-duratrac,g2=sku=150638601,g3=121对于我的第一个测试用例g1=example.com/en-US/tires/wrangler-duratrac,g2和g3将是空的这正是我想要的。非常感谢你这么善良的陌生人:)@克里斯:没问题。退房-非常方便的网站!现在前往那里剖析你的解决方案!