2014-03-12 22 views
1

我需要一個正則表達式匹配一些液體體積,如:如何使正則表達式匹配空間或字符串結束?

water in 17oz container 
water in container 17oz 

你會如何做一個正則表達式來匹配這些? 我可以做的只是/[0-9]{1,}oz/,但也會匹配90ozonelayers,並不是它會發生,但我希望它是萬無一失的。

/[0-9]{1,}oz /將不會匹配它,如果它在字符串的末尾。

+0

'\ s'匹配空白(如空格,製表符和新行) –

+0

可能重複的:http://stackoverflow.com/questions/6713310/how-to-specify-space-or-end- string-and-space-or-start-of-string – anderas

+0

'/ [0-9] {1,} oz [\ s $] /'? –

回答

0

[0-9]{1,}oz(\s|\b)

這符合你的兩個字符串,但不匹配上像12ozsdsds

編輯:

注意到,所有的解決方案都略有瑕疵,似乎採取的所有東西的結合,最好的可能是這樣的(被盜位來自tenub):

/(?<=\s|^)[0-9]{1,}oz(?=\s|$)/(使用/g來匹配所有的事件)。

17oz - 比賽

abc 17oz def - 比賽

17ozz - 敵不過

abc17oz - 敵不過

+0

這將匹配「17ozå」中的「17oz」。 – tenub

+0

確實如此,儘管xdazz和你的匹配「asdasd17oz」(就像我一樣,所以糾正了所有世界中最好的)。 – Rhys

+0

請注意,這不適用於JavaScript,因爲後視(儘管OP指定了PHP,所以它應該沒關係)。 – tenub

0

簡單。只需使用:

/[0-9]{1,}oz(?= |$)/ 
1

你可以使用\b到字邊界匹配:

/\b[0-9]+oz\b/ 
+0

正是我在尋找的感謝。 –

+1

這也是一個不正確的解決方案,因爲單詞邊界匹配任何非單詞字符,即。 '[^ A-ZA-Z0-9_]'。這意味着來自「17ozŵald」的「17oz」會匹配。 – tenub

+0

偉大的細粒度觀察,@tenub。統一Unicode!:} – J0e3gan

0

匹配34盎司34盎司,在字符串的結尾6盎司,但不是56ozone層。

([0-9]{0,})(\s{0,})(oz{1})(\s{0,}|$) 
相關問題