如何在java中使用Pattern matcher?
让我们说字符串是
我想从字符串中提取xyz
。 我用了:
Pattern titlePattern = Pattern.compile("<title>\\s*(.+?)\\s*</title>"); Matcher titleMatcher = titlePattern.matcher(line); String title=titleMatcher.group(1));
但是我收到了titlePattern.matcher(line)的错误;
你说你的错误发生得更早(实际错误是什么,运行没有错误),但解决之后你需要在匹配器上调用find()
一次来实际搜索模式:
if(titleMatcher.find()){ String title = titleMatcher.group(1); }
如果您真的匹配具有非转义HTML实体的字符串,请不要这样做
xyz
那么你的正则表达式将不得不使用这些,而不是转义的实体:
"\\s*(.+?)\\s* "
此外,您应该小心您尝试使用它的程度,因为您无法使用正则表达式真正解析HTML或XML 。 如果您正在使用XML,则使用XML解析器(例如JDOM)要容易得多。
从技术上讲,这不是一个答案,但你不应该使用正则表达式来解析HTML。 你可以尝试,你可以为简单的任务摆脱它,但HTML可以变得丑陋。 有许多Java库可以很好地解析HTML / XML。 如果您要使用HTML / XML进行大量工作,那么值得花时间学习它们。
正如其他人所建议的那样,用正则表达式解析HTML / XML可能不是一个好主意。 您可以使用标准java API解析XML文档,但我不建议这样做。 正如Fabian Steeg已经回答的那样,使用JDOM或类似的开源库来解析XML可能会更好。
使用javax.xml.parsers,您可以执行以下操作:
String xml = "abc "; DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse(new InputSource(new StringReader(xml))); NodeList nodeList = doc.getElementsByTagName("title"); String title = nodeList.item(0).getTextContent();
这会将您的XML字符串解析为Document对象,您可以将其用于进一步查找。 虽然API有点可怕。
另一种方法是使用XPath进行查找:
XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xPath = xpathFactory.newXPath(); String titleByXpath = xPath.evaluate("/title/text()", new InputSource(new StringReader(xml))); // or use the Document for lookup String titleFromDomByXpath = xPath.evaluate("/title/text()", doc);
- 无法使用Java的URLConnection获取响应头位置
- 我在哪里可以找到Eclipse 3.4中的Maven安装目录
- java中filewriter的flush和close函数之间的区别
- Javagenerics。 通用类型的数组
- java.sql.SQLException:Ioexception:在与oracle的JDBC连接期间从读取调用中减去了一个
- Spring-data-mongodb连接到一个Mongo实例中的多个数据库
- JPAinheritanceentitymanager.find生成ClassCastException
- Java:println中的boolean(boolean?“print true”:“print false”)
- unit testing使用资源包的静态方法