2011-04-14 65 views
1

我正在使用下面的正則表達式字符串來查找在這種情況下緊接着一個空格的單詞。我在這裏錯過了什麼?這將刪除任何和所有的空間,但我需要一些左。我只是試圖刪除緊接着一個空格的單詞,我將如何做到這一點。一個例子就是輸入。 (一二三)第一次更換應刪除「三」,第二次更換應刪除「一」只留下兩個。如果我只想要剩下三個,我只會使用第二行代碼。我的主要問題是在這裏得到正確的正則表達式模式。正確的正則表達式在一個單詞之前或之後刪除空格

preg_replace('/\s[A-z]/', '', $data); 
preg_replace('/[A-z]\s/', '', $data); 
+0

感謝大家清理A-Z錯誤,我認爲A-Z將是整個範圍,我現在看到A-Z是大寫字母,而a-z是小寫字母,或不區分大小寫? – 2011-04-14 17:26:59

回答

1

最大的問題是,在你的榜樣, 「二」在它前面也有一個空間。因此,第一次替換將刪除「兩個」和「三個」(一旦您將[A-z]更改爲[A-Za-z]+,那就是)。

我想你想是這樣的:

/\s[a-z]+(?!\s)/i 
/(?<!\s)[a-z]+\s/i 

注意添加+量詞。沒有這個,[a-z]只會匹配一個字符,所以你的「一個兩個三」的例子可能會導致「On w hree」。

另外,[A-z]技術上會導致未定義的行爲(並可能拋出異常),因爲大寫字母A到小寫字母z不是有效範圍。正如我上面所做的那樣,您需要[A-Za-z]或使用[a-z]進行不區分大小寫的匹配。

+0

感謝您解決這個問題。現在,即使能夠運行代碼即時看到它可能不可行,就像每個人都說要麼取代中間詞。所以我可以將(One Two Three)的前導空格去掉(One),或者將空格作爲(One Two Three)加到(Three)之後,是否沒有任何解決方法可以讓這個詞在中間留下來?這是最好的想法,但它顯然不適用於中間的單詞......任何想法? – 2011-04-14 17:25:17

+0

@Ryan - 上面的代碼應該僅僅因爲負面變化而留下「兩個」。你也可以使用'/^[a-z] + \ s | \ s [a-z] + $/i'這類的東西,只應該爲字符串中的第一個和最後一個單詞。 – 2011-04-14 17:50:18

+0

上面的更新代碼似乎不適用於我的情況,無論您在評論中引用的代碼是否完美無缺。再次感謝! :) – 2011-04-14 18:18:35

0

添加+以獲得A和z之間的一個或多個字符。

preg_replace('/[A-Za-z]+\s/', '', $data); 
preg_replace('/\s[A-Za-z]+/', '', $data); 
+0

無效的正則表達式:不允許使用[A-z]。 – hsz 2011-04-14 17:02:57

2

[A-z]比賽只有一個字母 - 它它太不正確,因爲你應該聲明[a-zA-Z]匹配所有大寫和小寫字母。

與嘗試:

/\s[a-zA-Z]+/ 

/[a-zA-Z]+\s/ 

之後,你的代碼應該是這樣的:

preg_replace('/\s[a-zA-Z]+/', '', $data); 
preg_replace('/[a-zA-Z]+\s/', '', $data); 
相關問題