0

我试图想出一个正则表达式来匹配特定的模式。

如果一个示例测试字符串如下:

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

正则表达式应该:

  1. 完全匹配/wp-content/themes/,从一开始,也应该/style.css完全匹配,从最后。
  2. NOT MATCH,当余数(第 1 项中的开始和结束字符串之间)为rwsarbor
  3. MATCH,当余数为 BUT 时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/!@#$%^&*()_+{}|:"?</style.css

就复杂性而言,这个有点超出我的范围,所以我正在向社区寻求帮助。

4

3 回答 3

3

试试这个 :

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

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


提示:使用负前瞻断言

于 2012-04-25T13:07:12.303 回答
1

只需从中制作两个正则表达式,一个匹配,一个不匹配(这里使用 grep 进行):

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

而不是 rwsarbor 和 mytheme 我选择了更好的可测试的东西。

一个较短的演示会很好,顺便说一句:/start/middle/end

于 2012-04-25T13:09:12.770 回答
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

语法和修饰符取决于您要使用的特定正则表达式引擎。

于 2012-04-25T13:18:53.813 回答