2015-08-26 173 views
2

我試圖preg_match_all從用戶輸入中得到的字符串,該字符串中有一個撇號。首先,我用一個普通的字符串對它進行測試,看它是否匹配,並且確實匹配。但是,當我試圖在相同的用戶輸入字符串上進行測試時,它不起作用。我認爲這是因爲用戶輸入中的撇號在我比較之前會被轉義。使用preg_match_all查找帶有撇號字符串的字符串

$temp1 = "I'm a person."; 

preg_match_all('/I\'m\s+(.+)/i', $temp1, $matches); 
$temp1 = $matches[1][0]; 
echo $temp1; 

輸出: 的人。

然而,因爲我是從用戶輸入獲得$溫度和轉義撇號,逃離了撇號時,它需要它完成,因此,它不匹配:

$temp2 = "I\'m a person."; 

preg_match_all('/I\'m\s+(.+)/i', $temp2, $matches); 
$temp2 = $matches[1][0]; 
echo $temp2; 

輸出:空值。

我該如何解決這個問題?謝謝。

回答

1

您可以使用:

preg_match_all('/I\\\\\'m\s+(.+)/i', $temp2, $matches); 
echo $matches[1][0]; 

輸出:

a person. 

使用\\\\在輸入匹配一個反斜槓。

+0

使用其中4個給我一個內部網絡錯誤。 – jessica

+0

[看這段代碼在這裏工作](http://ideone.com/bmAVuu) – anubhava

+1

我不得不說,所有這些逃跑是有點怪,哈哈。但它的工作原理。謝謝。 – jessica