使用正则表达式解析自定义URI

时间:2018-06-27 10:54:11

标签: regex regex-negation regex-lookarounds

我对正则表达式有疑问。

我目前在php库上工作,以创建更多人类可读的查询字符串过滤器。 (the libthe demo

问题来自令牌value{{value}}

regex:/(=)\{(\S*)(\}&?|\}$)/U

字符串:queryA={valueA1{{valueA1a}}&valueA2{{valueA2a}}}&queryB={valueB1{{valueB1a}}&valueB2{{valueB2a}}}

匹配项:

  • valueA1{{valueA1a而非valueA1{{valueA1a}}&valueA2{{valueA2a}}
  • valueB1{{valueB1a而非valueB1{{valueB1a}}&valueB2{{valueB2a}}

https://regex101.com/r/Dqg4SB/1

那么我该如何匹配}$}&却不能匹配}}$}}&

我想匹配{}之间的所有表达式,而不匹配{{ }}

1 个答案:

答案 0 :(得分:1)

您可以使用

/(=)\{([^}\s]*(?:}}[^}\s]*)*)}/

请参见regex demo

详细信息

  • (=)-第1组:一个=字符
  • \{-一个{字符
  • ([^}\s]*(?:}}[^}\s]*)*)-第2组:
    • [^}\s]*-除}和空格之外的零个或多个字符
    • (?:}}[^}\s]*)*-零次或多次重复:
      • }}-文字}}子字符串
      • [^}\s]*-除}和空格之外的零个或多个字符
  • }-一个}字符。