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

Parsing custom URI with regex

我对正则表达式有疑问。

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

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

正则表达式:/(=)\{(\S*)(\}&?|\}$)/U

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

匹配:

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

那么我怎样才能匹配 }$}& 而不是 }}$}}& 呢?

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

您可以使用

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

参见regex demo

详情

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