编写一个程序,我从一个文件中读取一个单词/符号列表,然后在另一个文本正文中搜索每个文件。
所以它就像:
while(<FILE>){
$findword = $_;
for (@text){
if ($_=~ /$find/){
push(@found, $_);
}
}
}
然而,一旦出现括号,我就会遇到麻烦。它给了我这个错误:
Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE
我意识到这是因为Perl认为(
是正则表达式的一部分,但我如何处理这个并使(
可搜索?
答案 0 :(得分:4)
答案 1 :(得分:3)
答案 2 :(得分:2)
您需要执行/\Q$find\E/
而非/$find/
- \Q
告诉解析器停止将元字符视为正则表达式的一部分,直到找到\E
答案 3 :(得分:1)
我怀疑您会发现m/\Q$find\E/
有用 - 除非您希望将其他Perl正则表达式元字符解释为元字符。
答案 4 :(得分:0)
\Q
的 \e
将在$find
变量中转义您的特殊字符,如:
while(<FILE>){
$findword = $_;
for (@text){
if ($_=~ /\Q$find\e/){
push(@found, $_);
}
}
}