我需要创建一个格式化文档。我知道用于格式化文本的正则表达式,但不知道如何为该正则表达式复制一个示例。 这个应该是内部链接:
'{\[((?:\#|/)[^ ]*) ([^]]*)\]}'
有人能否创建一个符合此要求的示例,并可能解释一下如何实现。我在'?'处卡住了。
我从未在开头使用过这个元字符,通常我使用它来标记文字不能出现或只能出现一次。
谢谢
我需要创建一个格式化文档。我知道用于格式化文本的正则表达式,但不知道如何为该正则表达式复制一个示例。 这个应该是内部链接:
'{\[((?:\#|/)[^ ]*) ([^]]*)\]}'
有人能否创建一个符合此要求的示例,并可能解释一下如何实现。我在'?'处卡住了。
我从未在开头使用过这个元字符,通常我使用它来标记文字不能出现或只能出现一次。
谢谢
查看开源RegexBuddy替代品和在线正则表达式测试工具获取一些有用的工具。最好先让它们解释一下正则表达式。我在这里使用了YAPE:
NODE EXPLANATION
----------------------------------------------------------------------
\[ '['
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
(?: group, but do not capture:
----------------------------------------------------------------------
\# '#'
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
/ '/'
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
[^ ]* any character except: ' ' (0 or more
times (matching the most amount
possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
' '
----------------------------------------------------------------------
( group and capture to \2:
----------------------------------------------------------------------
[^]]* any character except: ']' (0 or more
times (matching the most amount
possible))
----------------------------------------------------------------------
) end of \2
----------------------------------------------------------------------
\] ']'
----------------------------------------------------------------------
{
和}
是正则表达式分隔符的情况下。 [#NOSPACE NOBRACKET]
(?:...)
与(...)
具有相同的分组效果,但不会“捕获”组的内容;请参见http://php.net/manual/en/regexp.reference.subpatterns.php。(?:\#|/)
表示“要么是#
,要么是/
”。[^ ]*
的意思是“零个或多个非空格字符”,而[^]]*
的意思是“零个或多个非右方括号字符”。'{[/abcd asdfasefasdc]}'
我认为这是一篇帮助设计正则表达式的好文章。虽然编写通用的正则表达式来匹配字符串相对容易,但有时在设计完成后反向查看它会更有帮助。有时需要查看哪些奇怪的东西会匹配。
当将许多元字符与字面量混合使用时,格式化这些内容以便阅读和避免错误非常重要。
以下是一些 Perl 示例,对我来说更容易进行原型设计。
my @samps = (
'{[/abcd asdfasefasdc]}',
'{[# ]}',
'{[# /# \/]}',
'{[/# {[
| /# {[#\/} ]}',
,
);
for (@samps) {
if (m~{\[([#/][^ ]*) ([^]]*)\]}~)
{
print "Found: '$&'\ngrp1 = '$1'\ngrp2 = '$2'\n===========\n\n";
}
}
__END__
Expanded
\{\[
(
[#/][^ ]*
)
[ ]
(
[^\]]*
)
\]\}
输出
Found: '{[/abcd asdfasefasdc]}'
grp1 = '/abcd'
grp2 = 'asdfasefasdc'
===========
Found: '{[# ]}'
grp1 = '#'
grp2 = ''
===========
Found: '{[# /# \/]}'
grp1 = '#'
grp2 = '/# \/'
===========
Found: '{[/# {[
| /# {[#\/} ]}'
grp1 = '/# {[
|'
grp2 = '/# {[#\/} '
===========