2015-02-11 101 views
1

我嘗試使用preg_match_all 如果字符串是從我的PHP頁面上的文本提取子:如何在php頁面上搜索並獲取子字符串?

"Your customer ID is (CUS12345). Please login below." 
preg_match_all('/\b(CUS\d+/', $text, $matches); 

這行不通。我想就如何從中提取只有客戶ID - CUS12345的一些建議。

+0

首先,你有一個不平衡的羣體。 – 2015-02-11 17:18:45

回答

1
  • 你有一個不平衡的組。
  • 單詞邊界(\b)與空格不匹配。

試試這個:

\((CUS\d+) 

https://regex101.com/r/aS1zR4/1

這將使你的PHP成爲

$string = "Your customer ID is (CUS12345). Please login below."; 
preg_match("/\((CUS\d+)/", $string, $matches); 
print_r($matches[1]); //$matches[1] holds what you captured: CUS12345 
+0

謝謝,這個解決方案工作,不管字符沒有。非常感謝你的hlp – user3894937 2015-02-12 14:04:05

+0

真棒。很高興我能幫上忙。請[接受爲答案](http://i.stack.imgur.com/uqJeW.png)通知其他人您的問題已解決:) – 2015-02-12 14:06:01

1
"Your customer ID is (CUS12345). Please login below." 
preg_match_all('/CUS\d{5,}/', $text, $matches); 
+0

這不會有效,原因有兩個。您沒有分隔符,並且您從字符串的開頭搜索到字符串的末尾。 'CUS12345'不是字符串中唯一的東西。此外,如果它是'CUS123456'? – 2015-02-11 17:24:25

+0

已編輯。忘了粘貼在分隔符中,我對其進行了編輯,以便至少匹配5位或更多位數 – ChrisJ 2015-02-11 17:28:18

+0

好吧,現在如果它是'CUS1234'呢?授予的OP只給出了一個他想要捕獲的字符串的例子,但如果沒有考慮到它,它可能會導致一些嚴重的問題。您的正則表達式中也有'^'和'$',它將從'$ text'的開始到結尾開始查看 - 在這種情況下,不會捕獲任何內容。 – 2015-02-11 17:29:03

相關問題