我是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"
有没有可以跳过之前匹配的单词?
有人可以帮忙吗?
答案 0 :(得分:6)
一种可能的方法:
/"(?:\\.|[^"])*"/
......读作:
后跟任意数量的......
---任何转义字符(\
前面的任何符号)
---或任何不是双引号的字符
这里的关键技巧是使用替换任何转义符号 - 包括转义的双引号。