簡體   English   中英

Escaping Perl 正則表達式中的特殊字符

[英]Escaping special characters in Perl regex

我正在嘗試匹配 Perl 中的正則表達式。我的代碼如下所示:

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/$pattern/) {
  print "Match found!"
}

問題出現在當 Perl 試圖匹配正則表達式時,括號指示字符 class(或者我讀到的),並且匹配最終失敗。 我知道我可以使用\[\]轉義括號,但這需要通過字符串將另一個代碼塊添加到 go 並搜索括號。 有沒有辦法讓括號自動忽略而無需單獨使用 escaping?

快速說明:我不能只添加反斜杠,因為這只是一個示例。 在我的真實代碼中, $source$pattern都來自 Perl 代碼之外(URIEncoded 或文件)。

\\Q將禁用元字符,直到找到\\E或模式結束。

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ($source =~ m/\Q$pattern/) {
  print "Match found!"
}

http://www.anaesthetist.com/mnm/perl/Findex.htm

使用quotemeta()

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = quotemeta("Hello_[version]");
if ($source =~ m/$pattern/) {
  print "Match found!"
}

您正在使用錯誤的工具來完成工作。

你沒有模式! $ pattern中沒有正則表達式字符!

你有一個文字字符串。

index()用於處理文字字符串...

my $source = "Hello_[version]; Goodbye_[version]";
my $pattern = "Hello_[version]";
if ( index($source, $pattern) != -1 ) {
    print "Match found!";
}

您可以使用以下命令轉義表達式中的一組特殊字符。

expression1 ='帶有特殊字符的文本,如$%()';

expression1 = ~s / [\\?* + \\ ^ \\ $ [] \\(){} \\ | - ] /“\\ $&”/ eg;

這將逃脫所有特殊字符

print“expression1”;#text包含特殊字符,如\\ $ \\%()

引用$pattern破壞正則表達式的目的,除非它被用作已知字面並被轉換為真正的正則表達式。

編輯
否則,只需使用index()來查找子字符串的位置。 有了這些信息,只需使用substr()在必要時提取周圍的數據。

暫無
暫無

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

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