2012-04-25 54 views
0

我試圖想出一個正則表達式來匹配特定模式。正則表達式匹配定義字符串中間的任意數量的字符

如果樣品測試字符串如下:

/wp-content/themes/sometheme/style.css 

正則表達式應:

  1. MATCH /wp-content/themes/確切地說,從一開始,並且還應該匹配/style.css確切地說,從端部。
  2. 不匹配,當餘(第1項的開始和結束串之間)rwsarbor
  3. MATCH,當餘數是什麼,但mythemename
  4. 在中東的動態部分,它應該匹配任意數量字符,以及任何類型的字符(不只是AZ,0-9,等等)

。例如,它不應該匹配:

/wp-content/themes/mythemename/style.css 

應該匹配

/wp-content/themes/jfdskjh-ekhb234_sf/style.css 
/wp-content/themes/another_theme/style.css 
/wp-content/themes/any_other-theme/style.css 
/wp-content/themes/[email protected]#$%^&*()_+{}|:"?</style.css 

這是一個有點超出我的聯盟複雜性,所以我期待社會的幫助。

+0

給出一個不匹配的字符串示例(關於這個'rwsarbor'的東西,我也將它整合到我的回答中。 – 2012-04-25 13:10:24

+0

正則表達式用於的語言/環境會很好,因爲它們有所不同 – 2012-04-25 13:12:42

+0

說明: @Dr。Kameleon - 對不起,這是原來的問題(我現在已經更新了相應的帖子)的錯誤 - 它不應該匹配的字符串應該是: /wp-content/themes/rwsarbor/style.css – GWR 2012-04-29 11:20:24

回答

3

試試這個:

^/wp-content/themes/(?!mythemename).*/style.css$ 

演示:http://regexr.com?30ote


提示:使用Negative look-ahead assertion

+0

這個解決方案完全符合這個需求(在用'rwsarbor'交換'mythemename'後)。感謝您抽出時間來演示,非常感謝。 – GWR 2012-04-29 11:25:45

1

只需進行兩次正則表達式出來的,一個匹配,另一個不匹配(這裏使用grep做):

echo /wp-content/themes/sametheme/style.css | egrep "^/wp-content/themes/.*/style.css$" | egrep -v "(simetheme|sametheme)" 

相反rwsarbor和mytheme的我選用更好的東西測試。

較短的演示將是罰款,順便說一句:/開始/中間/結束

0

Vim的正則表達式:

^\/wp-content\/themes\/\(rwsarbor\|mythemename\)\@!.\{-}\/style\.css$ 

重要位:

\(__\|__\) - match one or the other pattern 
\@! - match if the preceeding atom didn't match 
.\{-\} - Like .* but non-greedy, otherwise style.css would get sucked up here 

語法和修飾符是依賴於您要使用的特定正則表達式引擎。

相關問題