我试图忽略所有带引号的行,不知何故它是一种融合:
> my $y='\"\""';
\"\""
> so $y ~~ m/<-[\"]>/
True # $y has a " mark, so I want it to be False
> $y ~~ m/<-[\"]>/
「\」
> $y ~~ m:g/<-[\"]>/
(「\」 「\」)
> $y ~~ m:g/<-["]>/
(「\」 「\」)
$y ~~ m/<-[\\]>/
「"」
> $y ~~ m/<-[\\\"]>/
False
是&lt; - [\&#34;]&gt;与&lt; - [&#34;]&gt;相同?
> say '"in quotes"' ~~ / '"' <-[ " ]> * '"'/;
「"in quotes"」
> say 'no "foo" quotes' ~~ / <-[ " ]> + /;
「no 」
> say 'no "foo" quotes' ~~ / <-[ \" ]> + /;
「no 」
在perl6文档示例https://docs.perl6.org/language/regexes#Wildcards_and_character_classes中,作者无需转义引号;但是,我必须逃避它的工作,&lt; - [\\&#34;]&gt; ,即逃脱\并逃脱&#34;。我误解了什么?
谢谢!
答案 0 :(得分:6)
除了反斜杠本身之外,您不需要转义字符类规范中的字符:因此指定<-[\"]>
与<-["]>
相同。并指定<-[\\"]>
,表示除 \
和"
之外的所有字符。
但是,对您来说可能有一种更简单的方法:如果您只是在字符串中查找一个(一组)字符,那么contains
:
my $y = "foo bar baz";
say $y.contains("oo"); # True
通过使用一个简单的低级字符串匹配来绕过所有昂贵的正则表达式/语法机制。