2011-04-26 73 views
1
$text = preg_replace('/[^\\/-a-z\s]/i', '', $text); 

我有這個表達式,它可以刪除除破折號,正斜槓和空白之外的所有內容。但是,無論我走到哪裏,它總是會留下數字。 任何想法?如何從PHP中的字符串中刪除數字?

$文字= 「龍飛鳳舞#_45/ADJ」=結果= FLAMBOYANT45/ADJ

+1

它會更容易定義要剩下什麼。 – 2011-04-26 00:13:55

+0

我需要的東西除了字母,正斜槓,破折號和空格外都沒有。這個表達式應該這樣做 - 除了數字還在那裏。 – user723220 2011-04-26 00:17:13

回答

3

逃生,你想在你的正則表達式匹配-。正則表達式中字符類部分的第一個連字符-具有特殊含義。它會產生範圍從/a(我認爲)。爲了ammend,嘗試:

$text = preg_replace('/[^\\/\-a-z\s]/i', '', $text); 
+0

@mu:公平的採摘。回答編輯。 – jsw 2011-04-26 00:34:58

1

這工作

$text = preg_replace('#[^\\/\-a-z\s]#i', '', $text); 
1

我的PHP福不是很強的,但我懷疑/-a-z被解釋爲字符範圍從/z(及注意事項該數字緊跟着斜槓在ASCII)所以也許你想這個:

$text = preg_replace('/[^\\/\-a-z\s]/i', '', $text); 

我剛剛添加了一個反斜槓來逃避(有時)正則表達式字符類中「 - 」的特殊含義。

+0

驚人的效果。我不知道破折號是一個元字符。我有這個元字符正則表達式的列表。 。^ * +?{{} \ |()}也不在這個列表中是正斜槓。 – user723220 2011-04-26 00:31:00

+1

@ user723220:連字符是一個特殊的內部字符類,例如'[a-z]',它用於表示字符範圍。但是,如果連字符位於字符類的開始或結尾,「[-a]」或「[z-]」,那麼它只是一個文字連字符。斜槓不是特殊的*內部*正則表達式,但它經常被用於*分隔正則表達式(例如'/ pancake /'),一些正則表達式引擎允許你使用不同的分隔符(比如這個Perl:'$ x =〜m!^ http://!'),以避免像'/ \\\ //'那樣難以理解的「牙籤」。 – 2011-04-26 01:25:30

0

<?php 
    $text = "FLAM-BOYANT#_45/ADJ"; 
    $allowed = "/[^a-z\\040\\.\\-\/]/i"; 
    $text= preg_replace($allowed,"",$text); 
    echo $text; //FLAM-BOYANT/ADJ 
?> 
相關問題