如何创建一个字符串来匹配正则表达式


How do you create a string to match an regex?

我需要创建一个格式化文档。我知道用于格式化文本的正则表达式,但我不知道如何重现该正则表达式的示例。这应该是一个内部链接:

'{'[((?:'#|/)[^ ]*) ([^]]*)']}'

有人能创造出一个与此相匹配的例子吗?也许可以解释一下他是如何做到的。我被困在了"?"。

我一开始从未使用过这个元字符,通常我用它来标记一个文字不能出现或只出现一次。

感谢

(?:...)具有与(...)相同的分组效果,但没有"捕获"组的内容;看见http://php.net/manual/en/regexp.reference.subpatterns.php.

因此,(?:'#|/)的意思是"#/"。

我猜你知道[^ ]*的意思是"零个或多个不是SP的字符",而[^]]*的含义是"零或多个非右方括号的字符"。

把它放在一起,一个可能的字符串是:

'{[/abcd asdfasefasdc]}'

有关一些有用的工具,请参阅开源RegexBuddy替代方案和在线regex测试。首先让他们解释正则表达式是最简单的。我在这里用过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]

我认为这是一篇帮助设计正则表达式的好文章。虽然写
相当容易匹配字符串的通用正则表达式,有时在
之后反向查看它会很有帮助它的设计。有时有必要看看什么奇怪的东西会匹配。

当混合许多元字符作为文字时,格式化
是相当重要的这些是为了便于阅读和避免错误。

以下是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 = '/# {[#'/}       '
===========