2009-11-14 99 views
1

我如何有一個不接受除新行的任何字符正則表達式語句。這包括什麼,但也包括新的生產線,而這並不是我想要的:PHP正則表達式不是新線

"/(.*)/" 
+0

你錯了。見傑里米流轉的的答案。 – Franz 2009-11-14 23:11:52

回答

14

,除非您使用的點.不匹配換行符s修飾符。

>>> preg_match("/./", "\n") 
0 
>>> preg_match("/./s", "\n") 
1 
+0

哇哈哈我正在使用,謝謝:D – David 2009-11-14 23:15:12

1

下面的正則表達式應匹配除換行符的任意字符

/[^\n]+/ 
+2

是,除了原有的空字符串相匹配,這一次至少需要一個非斷行字符...「/ [^ \ n] * /」 (如果你使用的是Windows,您可能希望排除\ r以及...)當然 – grossvogel 2009-11-14 23:14:04

+0

!謝謝你糾正我 – tosh 2009-11-14 23:20:55

4

書面上的Preg修飾符的PHP文檔頁面,點.不包括換行符,只有當你使用s修改。 Source

0

這很奇怪,因爲默認情況下點(。)不接受換行符。最可能的是你有一個爲「\ r」(回車)字符在那裏,所以你需要消除兩個:/[^\r\n]/

啊,你用/ s的

1

默認行爲不應與新線。因爲「s」修飾符用於使點匹配所有字符,包括新行。也許你可以提供一個例子來看看?

1
#!/usr/bin/env php 
<?php 

$test = "Some\ntest\nstring"; 

// Echos just "Some" 
preg_match('/(.*)/', $test, $m); 
echo "First test: ".$m[0]."\n"; 

// Echos the whole string. 
preg_match('/(.*)/s', $test, $m); 
echo "Second test: ".$m[0]."\n"; 

所以我不知道什麼是錯與您的程序,但它不是正則表達式(除非你在你的實際應用中/s修改。