RegEx在Eclipse中搜索并替换多行,包括start,middle和end

时间:2013-08-08 14:06:32

标签: regex eclipse

我正在努力想出一个很好的正则表达式搜索并替换以下情况。 我正在从RichFaces 3迁移到RichFaces 4,到目前为止,我可以使用正则表达式进行大量更改。

我有这样的事情:

     <a:ajax execute="@this"
    rendered="whatever" action="#{bean.method} 
someotherstuff="whatever"
    />

我想要做的是在上面替换action = with listener =但是没有改变任何其他内容我只想在a:ajax标签中进行。属性的顺序和出现可能会有所不同。

所以我基本上需要搜索并替换为:

<a:ajax(SEARCH1)action="(.+?)"(SEARCH2)/>

替换为

<a:ajax$1listener="$2"$3/>

任何想法。我想我可能需要前瞻但我尚未使用过

更新:已接受的解决方案在Eclipse中可用于搜索,但是Eclipse中存在一个已知的错误,当您使用环顾四周时,替换功能无效:https://bugs.eclipse.org/bugs/show_bug.cgi?id=109481

1 个答案:

答案 0 :(得分:1)

如果要在a:ajax标记内用action=替换listener=,则需要使用lookbehind而不是lookahead。你必须注意java中的lookbehind意味着你必须定义lookbehind范围的最大长度。

(?<=a:ajax[\w\W\n]{1,100})action="这样的通配符范围介于1到100之间,如果需要,可以通过更改{1,100}来增加它。

你可以做到

.replaceAll("(?<=a:ajax[\\w\\W\\n]{1,100})action=\"","listener=\"")

关于正则表达式看后方的注意事项:

  • Java允许有限重复。你仍然不能使用明星或 加上,但你可以使用问号和花括号 指定了最大参数。
  • JGsoft引擎和.NET框架RegEx类,可以做完整的正则表达式 在里面看看。
  • Javascript不支持lookbehind。
  • Python只能在lookbehind中使用固定长度。