1

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

我有这样的事情:

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

我想要做的是将上面的 action= 替换为 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

4

1 回答 1

1

如果您想在 a:ajax 标记内替换action=listener=您将需要后视而不是前瞻。并且您必须注意,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 允许有限重复。您仍然不能使用星号或加号,但可以使用问号和花括号并指定 max 参数。
  • JGsoft 引擎和 .NET 框架 RegEx 类,可以在lookbehind 内执行完整的正则表达式。
  • Javascript 不支持后视。
  • Python只能在lookbehind内部使用固定长度。
于 2013-08-08T14:33:44.263 回答