Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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_Xml_Pattern Matching - Fatal编程技术网

使用Java模式类的某些字符和数字的正则表达式

使用Java模式类的某些字符和数字的正则表达式,java,xml,pattern-matching,Java,Xml,Pattern Matching,我在字符串中有一些XML,希望用“”替换所有id属性值,其中id属性值以“widget”开头 以下是我的输入xml: <panel height="24" id="sd1" layout="vertical" left_padding="12" spacing="12" stereotype="directions" width="790" x="0" y="79"> <text_widget halign="left" id="widget5019721000" width=

我在字符串中有一些XML,希望用“”替换所有id属性值,其中id属性值以“widget”开头

以下是我的输入xml:

<panel height="24" id="sd1" layout="vertical" left_padding="12" spacing="12" stereotype="directions" width="790" x="0" y="79">
<text_widget halign="left" id="widget5019721000" width="761"/>
<text_widget halign="left" id="widget5019501000" width="761"/>
<text_widget halign="left" id="widget5019711000" width="761"/>
<text_widget halign="left" id="widget5019752000" width="761"/>
</panel>

如何在Java中使用正则表达式来实现这一点?

但是代码中有错误,
模式。编译
接收字符串参数,它是正则表达式模式,而不是源字符串。这是正确的代码

Pattern pattern = Pattern.compile("id=\\\"widget\d*")
Matcher match = pattern.matcher(xmlStr)
String result = match.replaceAll("id=\\\"")

String result=xml.replaceAll(“id=\\\”小部件[0-9]*,“id=\\”)

相反,您也可以使用XML处理。从
www.JDOM.org
下载JDOM,并将包含的JDOM-2.0.4.jar添加到类路径中。然后使用以下代码:

import java.io.StringReader;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class Test {
public static void main(String[] args) throws Exception {
    String xml = "<panel height=\"24\" id=\"sd1\" layout=\"vertical\" left_padding=\"12\" spacing=\"12\" stereotype=\"directions\" width=\"790\" x=\"0\" y=\"79\">"
                +"<text_widget halign=\"left\" id=\"widget5019721000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019501000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019711000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019752000\" width=\"761\"/>"
                +"</panel>";

    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(new StringReader(xml));

    List<Element> textWidgetElements = doc.getRootElement().getChildren("text_widget");
    for (Element e : textWidgetElements) {
        if (e.getAttributeValue("id").startsWith("widget")) {
            e.setAttribute("id", "");
        }
    }

    XMLOutputter out = new XMLOutputter();
    out.setFormat(Format.getPrettyFormat());
    String result = out.outputString(doc);

    System.out.println(result);
}
导入java.io.StringReader;
导入java.util.List;
导入org.jdom2.Document;
导入org.jdom2.Element;
导入org.jdom2.input.SAXBuilder;
导入org.jdom2.output.Format;
导入org.jdom2.output.XMLOutputter;
公开课考试{
公共静态void main(字符串[]args)引发异常{
字符串xml=“”
+""
+""
+""
+""
+"";
SAXBuilder=新SAXBuilder();
documentdoc=builder.build(新的StringReader(xml));
列出textWidgetElements=doc.getRootElement().getChildren(“文本”小部件);
对于(元素e:textWidgetElements){
如果(例如getAttributeValue(“id”).startsWith(“小部件”)){
e、 setAttribute(“id”,”);
}
}
XMLOutputter out=新的XMLOutputter();
out.setFormat(Format.getPrettyFormat());
字符串结果=out.outputString(doc);
系统输出打印项次(结果);
}

}

使用正则表达式处理XML有什么原因吗?使用XML有更好的方法。使用正则表达式修改XML不是一个好主意。尝试XML解析器,可能Java DOM解析器最适合您。您对模式和匹配器的使用是正确的。但是删除小部件
后面的数字怎么样?你的代码不能处理这个问题
id=“widget5019721000”
->
id=”“
。JLRishe:不使用正则表达式处理它的更好方法是什么
Pattern pattern = Pattern.compile("id=\\\"widget\d*")
Matcher match = pattern.matcher(xmlStr)
String result = match.replaceAll("id=\\\"")
import java.io.StringReader;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

public class Test {
public static void main(String[] args) throws Exception {
    String xml = "<panel height=\"24\" id=\"sd1\" layout=\"vertical\" left_padding=\"12\" spacing=\"12\" stereotype=\"directions\" width=\"790\" x=\"0\" y=\"79\">"
                +"<text_widget halign=\"left\" id=\"widget5019721000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019501000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019711000\" width=\"761\"/>"
                +"<text_widget halign=\"left\" id=\"widget5019752000\" width=\"761\"/>"
                +"</panel>";

    SAXBuilder builder = new SAXBuilder();
    Document doc = builder.build(new StringReader(xml));

    List<Element> textWidgetElements = doc.getRootElement().getChildren("text_widget");
    for (Element e : textWidgetElements) {
        if (e.getAttributeValue("id").startsWith("widget")) {
            e.setAttribute("id", "");
        }
    }

    XMLOutputter out = new XMLOutputter();
    out.setFormat(Format.getPrettyFormat());
    String result = out.outputString(doc);

    System.out.println(result);
}