【问题标题】:PCRE pattern that matches the in-delimiters text of a PCRE pattern与 PCRE 模式的分隔符文本匹配的 PCRE 模式
【发布时间】:2013-08-15 15:10:58
【问题描述】:

我正在寻找一种 PCRE 模式,它可以匹配 任何 有效 PCRE 模式的定界符之间的文本,而不管使用的定界符和修饰符如何。

【问题讨论】:

  • @JasonMcCreary 在/text/{text}iu 等中匹配text
  • 还请告诉我们您尝试过哪些不起作用的方法。另外,您知道如果要确保模式有效,您需要实际解析正则表达式?
  • @m.buettner 我试图寻找用于此目的的“标准”模式,但找不到。
  • @m.buettner 让这种情况下的有效性只由分隔符和修饰符的有效性来确定

标签: php regex pcre


【解决方案1】:

据我所知,有四个成对的分隔符:()[]{}<>。所有其他允许的字符只使用两次。根据documentation,我们可以使用任何非字母数字、非空白、非反斜杠字符。所以这个模式应该可以工作:

/
^
(?=([^a-zA-Z0-9\s\\\\])) # make sure the pattern begins with a valid delimiter
                         # and capture it into group 1
(?|                      # alternation for different delimiter types
                         # each alternative captures the pattern into group 2
  \((.*)\)               # handle (...)
|
  \[(.*)\]               # handle [...]
|
  \{(.*)\}               # handle {...}
|
  <(.*)>                 # handle <...>
|
  .(.*)\1                # handle all other delimiters with a backreference
)
[imsxeADSUXu]*           # allow for modifiers
$
/xs

如果你在

中使用这个$pattern
preg_match($pattern, $input, $matches);

然后你会在$matches[2]找到你想要的结果。

当然,这会接受一堆无效的模式,因为它不能确保分隔符不会出现在模式中的某个位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2019-01-03
    • 2021-07-10
    • 2011-09-08
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多