Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重复属性正则表达式简化_Java_Regex_Simplify - Fatal编程技术网

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什么将