我正在努力想出一个很好的正则表达式搜索并替换以下情况。 我正在从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
答案 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=\"")
关于正则表达式看后方的注意事项: