![](/img/trans.png)
[英]RegEx for PHP preg_replace swapping matches and matching multiple instances
[英]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.