簡體   English   中英

在perl中搜索括號

[英]searching for parentheses in perl

編寫一個程序,我從一個文件中讀取一個單詞/符號列表,然后在另一個文本正文中搜索每一個。

所以它是這樣的:

while(<FILE>){
    $findword = $_;

    for (@text){
        if ($_=~ /$find/){
            push(@found, $_);
        }
    }
}

但是,一旦括號出現,我就遇到了麻煩。 它給了我這個錯誤:

Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE

我意識到這是因為Perl認為(是正則表達式的一部分,但我如何處理這個並使(可搜索?)

您可以使用\\Q\\E

if ($_ =~ /\Q$find\E/){

或者只是使用index如果你只是尋找文字匹配:

if(index($_, $find) >= 0) {

通常反斜杠轉義正則表達式內的字符 - 即/\\(/將匹配文字(

在這種情況下,最好使用報價運算符

if ( $_ =~ /\Q$find\E/ ) {
    ...
}

或者使用quotemeta

你要做/\\Q$find\\E/而不僅僅是/$find/ - \\Q告訴解析器停止將元字符作為正則表達式的一部分考慮,直到它找到\\E

我懷疑你會發現m/\\Q$find\\E/有用 - 除非你想要將其他Perl正則表達式元字符解釋為元字符。

\\Q\\e將在$find變量中轉義你的特殊字符,如:

while(<FILE>){
    $findword = $_;

    for (@text){
        if ($_=~ /\Q$find\e/){
            push(@found, $_);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM