我正在寻找代码库中的重复属性,我把一个可以工作的表达式放在一起,但是我想知道它是否可以变得更简单或者更符合逻辑。
样本输入
test.append("<td class='no-order' style='text-align:center;' class=\"data text\">");我的尝试
<([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)(class=('|\\")[^('|\\")]+('|\\"))([^>]*)>我的想法是寻找一个开始标记<,然后是任何不是结束标记[^>]*的东西,后面跟着一个带有'或\"的类属性,然后重复整个过程。
正如你所看到的,即使它工作,它看起来相当长和复杂,他们是一个简单的方式吗?
编辑:
对于以替换all的形式编写它的人,超级奖励布朗尼点数,因此它在运行后组合了属性值。
发布于 2014-04-30 14:15:46
您可以使用以下正则表达式:
<.+(class)=("|').+?\2.+?\1.+>在你使用它之前先逃掉它。
如果它是matches字符串,那么它包含副本。否则,就不会了。
解释:
<.+(class)=("|')匹配<加任何字符,直到到达class=单引号或双引号为止。
如果字符串再次使用反向引用包含,则其余的正则表达式只匹配值。
发布于 2014-04-30 14:40:26
只需使用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");
}产出:
multiple class attribute found发布于 2017-04-25 12:42:21
要在Amit建议的基础上构建,如果您想确保它位于您可以使用的相同元素中:
<.+(class)=("|').+?\2[^>]+?\1.+>
添加[^>]将确保您的第二个类属性驻留在相同的元素中,因为它将匹配除标记结束之外的任何内容。
https://stackoverflow.com/questions/23390436
复制相似问题