perl字符串匹配问题

时间:2012-10-04 05:39:03

标签: regex perl

我有一个脚本,我需要跳过评论,我能够部分实现...

IN :

{****************************
{test : test...test }

Script:

if ( $data =~  m/(^{\*+$)/ ){
}

通过以上匹配,我能够识别评论并跳过它以获得下一行..

Out:
{test : test...test }

如果相同的评论由*所在的任何空格或任何字符组成,我的匹配失败..

IN:
{** *****    or   {* abccd   or {*abce

以上所有案件都未能跳过...... 在比赛中可能有什么问题,......任何人都可以帮助我......

3 个答案:

答案 0 :(得分:1)

正则表达式中的$是一个锚点,表示字符串/行的结尾,它坚持只有在初始*之后有一行时才会发生匹配{ {1}}

删除此锚点将允许所有三种情况匹配:

{

答案 1 :(得分:0)

目前还不清楚文本中的注释语法究竟是什么,但是根据示例,我将假设在行的开头{*,后跟任何内容直到该行的结尾,是一个评论。

在这种情况下,您的正则表达式/(^{\*+$)/将无效。那说:

  1. ^ - 匹配行的开头
  2. { - 匹配{
  3. \*+ - 匹配一个或多个* s
  4. $ - 匹配行尾
  5. 如果*和行尾之间还有其他内容,则此模式将不匹配。

    /^{\*.+$/之类的东西应该做你想要的。这会更改您的模式以匹配一个或多个非换行符(.),直到您到达行尾。

答案 2 :(得分:0)

如果您想允许{*部分后面的其他一些字符,请从模式中删除$

这是一个简单的 Perl代码,您可以从以下开始:

@data = <main::DATA>;
print map { $_ if !/^{\*+/ } @data;

__DATA__
{****************************
{test : test...test}

<强>输出

{test : test...test}

测试此代码here