perl regex匹配“”(字符串)语法

时间:2014-03-31 06:32:12

标签: regex string perl

我是Perl和regex的新手,我需要从文本文件中提取所有字符串。字符串由双引号包装的任何内容标识。

字符串示例:

"This is string"
"1!=2"
"This is \"string\""
"string1"."string2"
"S
t
r
i
n
g"

代码:

my $fh;

open($fh,'<','text.txt') or die "$!";

undef $/;
my $text = <$fh>;

my @strings = m/".*"/g; # this returns the most out "" in example 4
my @strings2 = m/"[^"]*"/g #fixed the above issue but does not take in example 3

编辑:我想得到(1)双引号,然后是(2)零次或多次出现非双引号 - 非反斜杠或反斜杠后跟任何字符,后跟(3)双引号。 (2)可以是&#34;

下面提供的正则表达式为m /&#34;(?:\。| [^&#34;])*&#34; / g但是当有一行"string1".string2."string2"时,它将返回"string1" string2 "string3"

有没有可以跳过之前匹配的单词?

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:6)

一种可能的方法:

/"(?:\\.|[^"])*"/

enter image description here

......读作:

  • 匹配双引号,
  • 后跟任意数量的......

    ---任何转义字符(\前面的任何符号)

    ---或任何不是双引号的字符

  • 后跟双引号

这里的关键技巧是使用替换任何转义符号 - 包括转义的双引号。

Demo