簡體   English   中英

PHP的preg_replace正則表達式匹配多行

[英]PHP's preg_replace regex that matches multiple lines

如何創建一個考慮到主題由多行組成的正則表達式?

一個“ m ”修飾符似乎不起作用。

Maxwell Troy Milton King是對的,但由於他的回答有點短,我也會發布這個並提供一些例子來說明。

首先, . 默認情況下,元字符與換行符不匹配。 對於許多正則表達式實現都是如此,包括PHP的風格。 那說,拿文字:

$text = "Line 1\nLine 2\nLine 3";

和正則表達式

'/.*/'

然后正則表達式只匹配Line 1 你自己看:

preg_match('/.*/', $text, $match);
echo $match[0]; // echos: 'Line 1'

因為.* “停止匹配” \\n (新行char)。 如果你想讓它與換行符匹配,請在正則表達式的末尾附加s-modifier(又名DOT-ALL修飾符):

preg_match('/.*/s', $text, $match);
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3'

現在關於m修飾符(多行):這將使^不僅匹配輸入字符串的開頭,而且還匹配每行的開頭。 $相同:它會讓$ match不僅與輸入字符串的結尾相匹配,而且還與每行的結尾相匹配。

一個例子:

$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/', $text, $matches);
print_r($matches); 

它只匹配3(在輸入的末尾)。 但:

但啟用m修飾符:

$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/m', $text, $matches);
print_r($matches);

每行末尾的所有(單個)數字('1','2'和'3')匹配。

試試's'修飾符。 意思是“就像一條線一樣對待”。

'm'允許使用^和$ line開頭和結尾。

暫無
暫無

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

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