我似乎無法找到這個問題的直接答案。在PHP中使用preg_match時我應該關心多字節字符串
如果我的模式不包含ASCII範圍,我需要的以外的字符/ U修飾符?該文件似乎不建議。如果匹配的字符串是UTF-8,我仍然會匹配我不想要的字符?
感謝
我似乎無法找到這個問題的直接答案。在PHP中使用preg_match時我應該關心多字節字符串
如果我的模式不包含ASCII範圍,我需要的以外的字符/ U修飾符?該文件似乎不建議。如果匹配的字符串是UTF-8,我仍然會匹配我不想要的字符?
感謝
我無法測試出你的第二個問題,因爲我沒有在我面前PHP環境,但回答的第一個問題是沒有。如果您只處理ASCII字符,則不需要/u
。
這不是模式是否包含utf字符,而是您要匹配的字符串是否。您可能不會查找非ASCII字符,但如果字符串中有任何多字節字符,則您的模式可以與UTF字符中的「額外」字節之一匹配。
雖然多字節序列不包含任何字節的任何7位ASCII代碼,但它不是UTF-8的一點嗎?因此,如果正則表達式引擎是8位清理的,那麼無論多字節內容如何,在UTF-8編碼的字符串中都不會匹配ASCII字符仍然可以。畢竟,所有的多字節UTF-8序列都具有始終設置第一位的字節。 –
接招例如一個字符串匹配/^.$/
。
var_dump(preg_match('/^.$/u','族'));
var_dump(preg_match('/^.$/','族'));
結果:
int(1)
int(0)
所以,是的/ U確實有差別,甚至當你在你的模式沒有ASCII表之外的字符。
你試過了嗎? :) – Furicane