2017-12-03 206 views

回答

2

我認爲您不需要包含此任務的u unicode標誌。

只需取消(*SKIP)(*FAIL)的不良空間資格,然後替換所有符合條件的空格。

代碼:(Demo)(Pattern Demo

$string = '英文 中文 English something else'; 
echo preg_replace('/[a-z] [a-z](*SKIP)(*FAIL)| /i','_',$string); 

輸出:

英文_中文_English something else 

模式說明:

[a-z] [a-z](*SKIP)(*FAIL) < - 這意味着匹配並丟棄信空間信發生
| < - 這意味着「OR」
< - 這將匹配字符串(每個非廢棄空間只有這些將被替換


兩個備選方案與lookarounds也將工作(和更快): (Demo

/(?<![a-z]) | (?![a-z])/i 

最快的所有的將是\B(單詞邊界元字符的否定版本):(Demo

/\B | \B/ 
+0

必須遵循|和空間?永遠不知道這(*跳過)(*失敗)非常有用 – kenken9999

+0

我已經添加了一些關於模式的更多解釋。 (和,是的,我同意'(*跳過)(*失敗)'是非常有用的。) – mickmackusa

+0

謝謝你這麼多,瞭解了這個 – kenken9999

0

我不知道那是什麼語言,但我發現這個:Use regular expression to match ANY Chinese character in utf-8 encoding

你的正則表達式需要包含(全部)中國字符,可以表示爲:

\p{Han}

這裏是關於Unicode字符和支持腳本列表的PHP文檔:http://php.net/manual/en/regexp.reference.unicode.php

+0

對不起,這是中文,我編輯了這個問題,實際情況相同 – kenken9999

+0

這篇文章提供了三條小建議;其中兩個只是鏈接。這篇文章可以更好地定位爲這個問題下的評論,因爲它不會試圖回答這個問題。 – mickmackusa

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18144388) –

0

對不起,我不知道如何在評論使用的代碼,所以只需添加回復

測試的第二和第三模式也工作

我明白了:第二個,但第三一個有點難受,LOL

我需要去檢查https://www.regular-expressions.info/

$string = '英文名 中文名 Peter Wong,John Tam,Sam Hu'; 
$string = preg_replace('/(?<![a-z]) | (?![a-z])/i', ',', $string); 

輸出

英文名,中文名,Peter Wong,John Tam,Sam Hu 

因爲CJK名稱是每個字符之間沒有空格,所以這解決了大問題,我

工作就像一個魅力;)

三江源@mickmackusa

相關問題