[英]I don't understand this Textile Regex
我在Textism Textile的PHP代码中找到了以下正则表达式:
/\b ?[([]TM[])]/i
我认为自己在阅读正则表达方面经验丰富,但这对我来说是一个谜。 开始很简单,但我不明白为什么在已打开的字符类[[][]]
有两个空字符类?
有人能解释一下这个问题吗?
这是一个相当神秘的......
这就是它的含义:
/ # start regex pattern
\b # word boundary
? # an optional space
[([] # char class: either '(' or '['
TM # literal 'TM'
[])] # char class: either ']' or ')'
/ # end regex pattern
i # match case insensitive
有些事情需要注意:
[
不是特殊的,不需要转义( [([]
因此有效!) [])]
因此有效: ]
不需要转义!) 总而言之,它匹配由[
或(
和]
或)
包围的"TM"
不区分大小写(它们不需要匹配: "[TM)"
在大多数情况下将匹配)。 我说在大多数情况下,因为\\b ?
将导致"[tm)"
从下面的演示中的匹配中排除,因为它前面是". "
,它与\\b ?
不匹配\\b ?
:
<?php
preg_match_all(
'/\b ?[([]TM[])]/i',
"... [tm) foo (TM) bar [TM] baz (tm] ...",
$matches
);
print_r($matches);
?>
/*
Array
(
[0] => Array
(
[0] => (TM)
[1] => [TM]
[2] => (tm]
)
)
*/
如果正则表达式遵循正则表达式的POSIX风格,则编辑: ]
似乎被允许作为字符类的第一个字符。 见http://www.regular-expressions.info/posixbrackets.html 。 在PHP中, eregs_
函数使用POSIX,而preg_
函数使用不允许此构造的较新的PCRE风格。
所以,提供POSIX风味:
[([]
是一个由(和[和]组成的字符类
[])]
是另一个由]和)组成的。 大多数regexp引擎都需要编写第二个字符类
[\])]
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.