2012-12-14 46 views
1

我有一個正則表達式的preg_match管跡象

|^(/[a-z]{2})?/?(php)/([-a-z0-9]+)/?/?$| 

匹配哪個/php/anything

現在我想正則表達式匹配都

/php/anything 
/java/anything 

我累了|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|但它不工作哪。

有人可以幫我解決嗎? 我想保留所有其他部分,但只改變(php)部分。

下面是代碼

preg_match("|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|", 'php/anything') 

但我得到這樣的警告和匹配不起作用

Warning: preg_match(): Unknown modifier 'j' 

感謝

+0

你的正則表達式是不是很優雅,但它似乎工作:HTTP:/ /rubular.com/r/J2mE8vdhjb問題具體是什麼?你可以發佈一些代碼嗎? –

+0

你究竟想要什麼匹配..我們可以幫助清理你的正則表達式。 – Anirudha

+0

或者我們只需要(php | java)/([ - a-z0-9] +)/?部分 – user1105950

回答

1

您正在使用|作爲正則表達式的分隔符,但你有一個|裏面的正則表達式作爲改變,你需要逃避。如果第二個|被視爲正則表達式的結尾,並且它後面的字母j被視爲正則表達式修飾符。由於j不是有效的修飾符,因此會出現錯誤。

你逃脫|爲:

preg_match("|^(/[a-z]{2})?/?(php\|java)/([-a-z0-9]+)/?/?$|", 'php/anything') 
           ^

或者你也可以使用不同的分隔符對的:

preg_match("~^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$~", 'php/anything') 
      ^          ^
+0

在URL中只能有php或java。 – user1105950

+0

我已經試過轉義 – user1105950

+0

啊,好了,現在我明白了。謝謝您的幫助 – user1105950

1

的問題很簡單,您使用的管道標誌作爲字符定界你的模式。因此,你需要躲避模式本身內的管道標誌,或者只是改變分隔符到別的東西,你將不會被使用在你的模式:

#^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$# 
{^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$} 

+0

感謝您的幫助 – user1105950