2013-08-27 40 views
0

正則表達式有點麻煩。我試圖測試一場比賽,但只有在沒有任何後續比賽的情況下。所以在下面的例子中,如果我去測試/創建/ 1/2 - 它仍然匹配。我只想匹配,如果它明確地測試/創建/ 1(但一個是動態的)。正則表達式 - 匹配字Aslong As Nothing跟着它

if(preg_match('^test/create/(.*)^', 'test/create/1')): 
    // do something... 
endif; 

我發現了一些答案,建議在我的分隔符之前使用$,但它沒有出現任何操作。或^和$的組合,但我不能完全弄明白。正則表達式混淆了我的地獄!

編輯:

我真的不解釋這不夠好,所以我只想澄清:

我所需要的,如果URL是測試/創建/ {ID}語句返回true - {該id}是動態的(和任何長度)。如果{id}後跟正斜槓,則if語句會失敗。因此,如果在測試有人類型/創建/ 1/2 - 它會因爲1

解決方案

我去到底thedarkwinter的回答後,正斜槓的失敗,因爲它就是最好的工作對我來說,儘管其他答案也有效。

我也不得不在正則表達式中添加一些額外的,以確保它會帶連字符的工作,以及因此最終的代碼是這樣的:

if(preg_match('^test/create/[\w-]*$^', 'test/create/1')): 
     // do something... 
endif; 

回答

2

/w匹配單詞字符和$相匹配的字符串

if(preg_match('^test/create/\w*$^', 'test/create/1')) 

年底將匹配測試/製作/ [字/ NUM]並沒有什麼以下。

我認爲這就是你以後。

編輯添加*在\ W *

3

使用下面的正則表達式(使用$表示輸入)的結束:

'|test/create/[^/]+$|' 

如果你只想要匹配的數字,使用folloiwng代替(\d匹配數字字符):

'^test/create/\d+$^' 
+0

第一個給我下面的錯誤:^測試/製作/ [^ /] + $^ 第二個工程,但即使有後它的東西相匹配。任何更多的幫助將是偉大的。 – 0Neji

+0

@ 0Neji,我修正了第一個代碼。這兩個版本都適合我。請參閱http://ideone.com/au7iqu。 – falsetru

0

正則表達式abc$僅當它是最後一個字符串時纔會匹配abc

abcd # no match 
dabC# match 
abC# match 
1

^是行開頭的錨,即在^之前沒有發生字符。使用$來指定字符串的結尾或行的結尾。

編輯:想補充的建議,以及:

你的解決辦法是罰款和工作,但在風格我會建議不要使用克拉(^)作爲分隔符術語 - 尤其是因爲它具有特殊的含義,既可以是否定的,也可以作爲行首的起始點,所以讀這種方式有點令人困惑。只要在正則表達式本身中不發生(或轉義),您就可以合法使用大多數特殊字符。只是在這裏談論風格/可維護性問題。

當然,幾乎每個潛在的分隔符都有一些特殊的含義,但是你也經常傾向於在正則表達式的開頭看到^,所以我可能會選擇另一種選擇。例如#是一個很好的選擇在這裏:

if(preg_match('#test/create/[\w-]*$#', $mystring)) { 
//etc 
} 
3

在這裏你去:

"/^test\\/create\\/([^\\/]*)$/" 

這是說: 字符串以「test」,後跟一個斜槓開始(還記得第一個反斜槓轉義第二個PHP在輸入中放置一個字母反斜槓,它將/轉換爲正則表達式),然後是創建,然後是正斜槓,然後捕獲所有不是斜槓的字符串。

評論,如果您需要更詳細

我喜歡我的表情總是先從/因爲它沒有任何意義的正則表達式的性格,我見過@使用,我相信其他一些答案使用^,這個手段「字符串的開始」,所以我不會將它用作我的正則表達式分隔符。