2014-07-19 159 views
1

我試圖從文本中刪除長破折號和正常破折號。我能夠刪除單個正常破折號,但我遇到了很長的問題。我也能夠刪除它們,但是這會導致文本中的數字出現問題。正則表達式如何從文本中刪除所有長破折號/超文本和常規破折號?

例如文本:asdasd2 34 56 ——————————————-

我不喜歡的正則表達式[\ u2014 \ - ],並將該刪除所有長和正常的破折號,而且還消除所有的數字。 [\ - ]消除了沒有問題的正常破折號。任何人都可以幫助正確的正則表達式?我想刪除文本中的所有類型的破折號,並將其替換爲空白。在此先感謝

+0

'$ var = str_replace(' - ','',$ string);'不起作用。它只適用於[]括號。我試過'[\ - ]',但它不起作用。 '[\ - ]'適用於普通破折號。 '[\ u2014]'適用於長劃線,但也會刪除所有數字。 –

+0

'$ remove = array(' - ',' - '); $ test ='asdasd2 34 56 ---------------';回聲str_replace($ remove,'',$ test);' –

+0

'var str =「asdasd2 34 56 ---------------」。replace(/ [\ u2014 \ - ]/G, 」」); str;' – guest271314

回答

0

下面的代碼片段可以幫助你

<?php 

$string = "asdasd2 34 56 ——————————————-"; 
$string = preg_replace("/(?:(?=—|\-).)+/", "", $string); 
echo $string; // asdasd2 34 56 

?> 

下面的兩個表達式也應該取代所有類型的hypens

[\p{Pd}]+ 
[\x{2010}-\x{2015}|\x{002D}|\x{2212}|\x{FE58}|\x{FE63}|\x{FF0D}]+ 

,但由於某種原因,我得到一個錯誤或的帶有這個奇怪字符的字符串( )。我就是這樣想出第一個解決方案的。

0

假設我們正在談論php,因爲你的正則表達式中js作品)

試試這個:[\p{Pd}]+[\—\-]+

這裏\p{Pd}比賽任何種類的連字符或破折號的。見HERE

輸入:asdasd2 34 56 —————---—————————-------------

輸出:asdasd2 34 56

+0

'\ p {Pd}'是我的第一個猜測/嘗試,但是我得到了一個奇怪的字符串,比如'asdasd2 3456 '\ u或\\ u不支持 - 您可以使用\ x {2014}代替,但是我無法使用它刪除連字符 – hex494D49

+0

嘗試打印字符串***,因爲它是***並查看字符是否顯示精細。 – sunbabaphu

+0

那麼,他們沒有按預期顯示。正如我之前所說:) – hex494D49

0

您還可以使用字符本身,而不是他們的十六進制編碼。

'asdasd2 -34 56 ——————————————-'.replace(/[—-]/g, "") 
//output "asdasd2 34 56 " 
+0

PHP中沒有'replace()'函數 – hex494D49

+0

@ hex494D49它是JS –

0

爲了紀念所有的長劃線和正常破折號在PHP中:

[\x{2014}-]+ 

問題是PHP不支持\ uFFFF以符合Unicode代碼點。

相關問題