[英]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!"
}
使用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.