java - 使用正则表达式的 JSP 文本处理

标签 java regex

我有大量 (>1500) 个 JSP 文件要转换为 JSPX。我正在使用一种工具来解析格式良好的 JSP 并转换为 JSPX,但是,我的 JSP 并非都是格式良好的 :)

我的解决方案是预处理 JSP 并转换不整洁的代码,以便该工具能够正确解析它们。我试图解决的主要问题是未加引号的属性值。示例:

<INPUT id="foo" size=1>
<input id=body size="2">

我目前用于查找这些的正则表达式是(Java 字符串格式):

"(\\w+)=([^\"' >]+)"

我的替换字符串是(Java 字符串格式):

"$1=\"$2\""

这很好用,除了少数模式,这两种模式都涉及内联脚本。例如:

<INPUT id=foo value="<%= someBean.method("a=b") %>">

在这种情况下,我的模式匹配字符串文字“a=b”,这是我不想做的。我希望发生的是正则表达式会忽略 <% 和 %> 之间的任何内容。是否有一个正则表达式可以完成我想做的事情?

编辑: 更改为标题以阐明我不是在尝试使用正则表达式解析 HTML/JSP...我正在做一个简单的句法转换来准备要解析的输入。

最佳答案

如果一个句子包含任意数量的匹配标记,例如双引号,那么这个句子属于上下文无关语言,根本无法用专为处理常规语言而设计的 Regex 进行解析。

要么可能存在一些允许使用 Regex 的简化假设(例如,没有不匹配的双引号,只有一定数量的双引号等),要么您需要考虑使用(创建)词法分析器/parser 对于上下文无关语言的情况。 ANTLR是一个很好的工具。

关于java - 使用正则表达式的 JSP 文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726925/

相关文章:

java - 以编程方式将单选按钮与右侧的文本和左侧的按钮对齐

java - 在 quartz 调度器上,需要澄清

java - 在JAVA中使用正则表达式如何说4个任意字母一个空格然后4个数字

regex - 在 Notepad++ 中查找不以“开头的行

java - 在正则表达式 java 中获取括号内的文本以及分隔符?

java - Realm 不断调用 onChange addChangeListener

java - Java中的大数计算?

Javascript正则表达式查找两个分隔符之间的两个字符

javascript - 使用正则表达式在 html 中查找 url

javascript - Backbone.js 路由器匹配可选参数