我有一個LONGTEXT列此數據(所以換行符被保留):PHP的preg_match不符合過去的換行符
Paragraph one
Paragraph two
Paragraph three
Paragraph four
我想通過我3.以配合第1款使用此代碼:
preg_match('/Para(.*)three/', $row['file'], $m);
這不會返回任何內容。如果我嘗試只是段落的首行內工作,通過匹配:
preg_match('/Para(.*)one/', $row['file'], $m);
然後代碼工作,並獲得正確的字符串返回。我在這裏做錯了什麼?
警告:'/ s'修飾符是貪婪的。如果文本中有多個「三」,則匹配將包括所有文本直到最後一次發生。使用'/ sU'來防止這種情況(注意大寫字母U)。 –
@FrankForte不是一個修飾符問題:'*'重複本身就是貪婪的。更好的方法是放一個問號讓它懶惰:'/ Para(。*?)three/s'。另外,'/ U'修飾符不會取消貪婪,但會反轉它:'*'變懶,'*?'變貪婪。 OP代碼不是問題,但它可以在更復雜的正則表達式中觸發奇怪的錯誤。 –