作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 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 ?
:
<?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]
)
)
*/
关于php - 我不明白这个 Textile Regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14768788/
我是一名优秀的程序员,十分优秀!