關於如何在Perl中執行多行正則表達式有許多問題。他們中的大多數提到s
開關,使點匹配換行符。但是,我想匹配一個確切的短語(所以,而不是模式),我不知道換行符會在哪裏。所以問題是:你可以忽略換行符,而不是將它們與.
匹配?不帶點的Perl正則表達式多行匹配
MWE:
$pattern = "Match this exact phrase across newlines";
$text1 = "Match\nthis exact\nphrase across newlines";
$text2 = "Match this\nexact phra\nse across\nnewlines";
$text3 = "Keep any newlines\nMatch this exact\nphrase across newlines\noutside\nof the match";
$text1 =~ s/$pattern/replacement text/s;
$text2 =~ s/$pattern/replacement text/s;
$text3 =~ s/$pattern/replacement text/s;
print "$text1\n---\n$text2\n---\n$text3\n";
我可以把圓點圖案代替空格("Match.this.exact.phrase"
),但是,這並不對第二個例子工作。我可以刪除所有換行符作爲預處理,但我想保留不屬於匹配的換行符(如第三個示例中所示)。
所需的輸出:
replacement text
---
replacement text
---
Keep any newlines
replacement text
outside
of the match
大多數情況下,您將換行符視爲空格。然後有一次你想忽略它。做任何一個都很簡單。做這兩件事幾乎是不可能的。 – ikegami