我在Textism Textile的PHP代码中找到了以下正则表达式:
/\b ?[([]TM[])]/i
Run Code Online (Sandbox Code Playgroud)
我认为自己在阅读正则表达方面经验丰富,但这对我来说是一个谜.开始很简单,但我不明白为什么在已打开的角色类中有两个空字符类[[][]]?
有人能解释一下这个问题吗?
这是一个相当神秘的......
这就是它的含义:
/ # 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
Run Code Online (Sandbox Code Playgroud)
有些事情需要注意:
[不是特殊的,不需要转义([([]因此有效!)[])]因此有效:]不需要转义!)总而言之,它匹配"TM"由[or (和]or 包围的不区分大小写)(它们不需要匹配:"[TM)"在大多数情况下将匹配).我说在大多数情况下,因为它\b ?会导致"[tm)"从下面的演示中的匹配中排除,因为它前面的". "匹配不匹配\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]
)
)
*/
Run Code Online (Sandbox Code Playgroud)