繁体   English   中英

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

[英]Java regex for string pattern

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

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

我想获取Col标签之间的值。

我尝试了以下模式:

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

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

你可以试试:

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

请尝试以下方法:

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

它将匹配0个或多个数字,其前面带有“>(引号和大于符号),然后是(小于符号和正斜杠)

您可以在这里测试:

https://regex101.com/

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

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

您需要的是

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

注意:您可能要使用(\\d+?)而不是(.+?)因为\\d将匹配任何数字,因此正则表达式更特定于您要匹配的数据,并且更易于阅读。 但是,如果您知道某些Col标签不会只包含数字,则此方法将不起作用


您可能要参考此简洁的交互式Regex教程 ,以进行regex的实践。

您可能还希望参考Java文档中的Regex模式 ,这在需要特殊字符时很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM