与PCRE模式的in-delimiters文本匹配的PCRE模式

时间:2013-08-15 15:10:58

标签: php regex pcre

我正在寻找一种PCRE模式,它与任何有效PCRE模式的分隔符之间的文本相匹配,无论使用的分隔符和修饰符如何。

1 个答案:

答案 0 :(得分:2)

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

/
^
(?=([^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]找到你想要的结果。

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