如何在正则表达式中包含两个字符之间的模式?
我想在" "
This is an "example".
This "is" "an" example.
"This" is an example.
这是我到目前为止所尝试过的,但我想我错过了一些东西:
m/(?!"(.*)").*/g
答案 0 :(得分:1)
$s = 'This "is" "an" example';
@words = ($s =~ /"([^"]*)"/g);
@words
包含" "
答案 1 :(得分:0)
您可以使用s///
删除双引号之间的子字符串。
这是一个测试程序:
#!/usr/bin/perl
use strict;
use warnings;
use feature qw(switch say);
use Data::Dumper;
while (<DATA>) {
chomp;
s/"[^"]*"//g;
print "$_\n";
}
__DATA__
This is an "example".
This "is" "an" example.
"This" is an example.
结果:
$ perl t.pl
This is an .
This example.
is an example.
答案 2 :(得分:0)
与redraiment的解决方案类似:
@words_in_quotes = ($s =~ /"(.*?)"/g)
不需要后面的断言。
答案 3 :(得分:0)
这几乎是XY Problem
断言是正则表达式的一种高级功能,对于您必须解决的大多数问题,很可能不需要断言。
相反,我会专注于基础知识,可能从贪婪与非贪婪的匹配开始。
@quoted_words = ($s =~ /"(.*?)"/g);
任何时候,您使用量词*
或+
,它会尝试尽可能多地匹配,然后再回过头来。您可以通过减少应匹配的字符类型和添加边界条件来限制此操作,或者通过添加问号将匹配更改为非贪婪来限制此操作。 *?
或+?