用于字符串模式的Java正则表达式

时间:2017-12-05 21:14:31

标签: java regex

我想为这个字符串模式写一个正则表达式:

<Col name="SKU_UPC_NBR">85634546495</Col>

我想获取Col tag之间的值。

我尝试了以下模式:

Pattern TAG_REGEX = Pattern.compile("<Col name='SKU_UPC_NBR'>(.+?)</col>");
Matcher matcher = TAG_REGEX.matcher(str);

以上不匹配我的字符串并返回空。 请帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

您可以尝试:

<Col[^>]*>(.+?)<\/Col>
  1. <Col[^>]*>将与开头标记匹配。 [^>]*表示匹配除&gt;之外的任何字符,以便匹配在第一个&gt;处结束遇到。
  2. (.+?)表示在开始和结束标记之间抓取1个或多个字符
  3. <\/Col>这与结束标记
  4. 匹配

答案 1 :(得分:1)

请试试这个:

(?<=">)\d*(?=<\/)

它将匹配前面带有“&gt;(引号和大于号)的0位或更多位数,后跟(小于符号和正斜杠)

您可以在此处测试:

https://regex101.com/

答案 2 :(得分:1)

正则表达式匹配完全您键入的内容。它没有概括,它不理解有时对你' == ",它与混合情况不匹配。

您指定的数据格式是开放标记,空格,名称属性,等于,双引号,名称attr数据......
您指定的正则表达式格式为开放标记,空格,名称属性,等于,单引号,名称attr数据...

您需要的是

Pattern TAG_REGEX = Pattern.compile("<Col name=\"SKU_UPC_NBR\">(.+?)</Col>");

注意:您可能希望使用(\d+?)代替(.+?),因为\d会匹配任何数字,因此正则表达式更具体针对您的数据#39;重新匹配,更易于阅读。但是,如果您知道某些Col个标签不会包含数字

,那么这项功能无法运行

您可能需要参考this neat interactive Regex tutorial进行正则表达式练习。

您也可以参考Java documentation for Regex patterns,这在您需要特殊字符时非常有用。