Java 重复属性正则表达式简化
我在代码库中寻找重复的属性,我将一个表达式组合在一起,可以工作,但我想知道它是否可以变得更简单或更符合逻辑 样本输入Java 重复属性正则表达式简化,java,regex,simplify,Java,Regex,Simplify,我在代码库中寻找重复的属性,我将一个表达式组合在一起,可以工作,但我想知道它是否可以变得更简单或更符合逻辑 样本输入 test.append("<td class='no-order' style='text-align:center;' class=\"data text\">"); <([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*
test.append("<td class='no-order' style='text-align:center;' class=\"data text\">");
<([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)>
test.append(“”);
我的尝试
test.append("<td class='no-order' style='text-align:center;' class=\"data text\">");
<([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)>
]*)(类=(“\\”[^(“\\”)+(“\\”)([^>]*)(类=(“\\”)[^(“\\”)+(“\\”))([^>]*)>
我的想法是寻找一个开始标记
]*
,后跟一个带有'
或\“
的类属性,然后重复整个过程
正如你所看到的,即使它有效,它看起来相当长和复杂,他们的方法更简单吗
编辑:
无论谁以全部替换的形式写入,都会获得超级奖金布朗尼点数,因此在运行后,它会组合属性值。您可以使用以下正则表达式:
<.+(class)=("|').+?\2.+?\1.+>
只需使用class=(“|”)
检查多个类属性
示例代码:
String str = "test.append(\"<td class='no-order' style='text-align:center;' class=\"data text\">\");";
Pattern pattern = Pattern.compile("class=(\"|')");
Matcher matcher = pattern.matcher(str);
int index = 0;
while (matcher.find()) {
index++;
}
if (index > 1) {
System.out.println("multiple class attribute found");
}
根据Amit Joki的建议,如果您想确保它位于可以使用的相同元素中,请执行以下操作:
您可以使用捕获组。。检查是否一个反向引用与指定的匹配完全匹配,如果属性有不同的内容怎么办class=“hello”,class=“wow”
你真的关心“hello”和“wow”吗?。两个都只是名字。。你只需要类=“…”对吗?考虑使用代替正则表达式。还有一个问题,你不应该使用正则表达式来解析html。@JohnMercier,完全没有抓住问题的重点。。。我已经接受了答案。这是为了搜索和替换,而不是解析…非常聪明,我没有想到只匹配另一个类属性,呃,这么简单。。接受您真的必须创建捕获组吗?;-)@epoch,一定要避开正则表达式。我看到了编辑。使用replaceAll
无法如此轻松地完成此操作。你需要做一些替换,检查它是否与原始的和所有类型的东西相同。所以,只需使用匹配项就可以了;)@AmitJoki-很好的回答+1:)@AmitJoki什么将