2013-06-11 45 views
1

是否有正则表达式来替换字符串的外部部分,同时保持内部部分?

前:

${person.dog.name}

后:

<c:out value="${person.dog.name}"/>

我需要在Eclipse编辑器中使用它,而内部的变化。


这可能是太有用:

搜索:\$\{(.*?)\}

替换:\$\{fn:escapeXml\($1\)\}

${person.dog.name} 

成为

${fn:escapeXml(person.dog.name)} 
+0

被警告说,到目前为止propsed正则表达式替换将发生故障的硬盘上的结构,如'',''等等,你不想用''或' FN:将escapeXml()'。 – BalusC

回答

0

查找表达:

(\$\{[^\}]+\}) 

和替换表达式是:

<c:out value="$1"/> 

要找到${person.dog.name}在Eclipse编辑器<c:out value="${person.dog.name}"/>

编辑:

要小心,而使用它,因为<c:if test="${foo}">会落得像

+0

OP仅仅是询问如何在Eclipse的搜索和替换中使用它,而不是在Java代码中(很可能作为修复在一堆JSP文件中完全监督XSS攻击漏洞的过程的一部分)。 – BalusC

+0

Lolzz ..知道它错了,然后... =)) –

+0

那么,修复答案呢?或者只是删除,如果你不能。 – BalusC

-1

菊第一捕获整个字符串^(.*)$然后在替换功能使用使用像<c:out value="$1"/>一个反向引用,其中$1是反向引用

string.replaceAll("^(.*)$", "<c:out value=\"$1\"/>") 

在Eclipse see link。你会把^(.*)$分成find,<c:out value="$1"/>换成。选择正则表达式,点击查找并替换。

如果你正在寻找捕捉所有${foo}<c:out value="${foo}"/>?在一些较大的文本,那么你将不得不使用正则表达式([$]{foo})找到那么所有所需的文本在替换字段使用<c:out value=\"$1\"/>

+0

OP询问如何在Eclipse的搜索和替换JSP文件中使用它,而不是在Java代码中。 – BalusC

+0

添加了关于如何查找/替换Eclipse手册的链接 –

+0

尽管如此,您似乎期待整个JSP文件仅包含一个EL表达式。你的正则表达式就是“全部匹配”。它不符合个人'$ {...}'本身不在标签内的部分,例如''或者甚至例如''(这个替换不是必须的)。 – BalusC

相关问题