正则表达式仅捕获特定标记内的数字

时间:2018-03-09 20:55:27

标签: java regex

我有以下文字

<msgText>H3ll0World</msgText><msgText>HelloWorld</msgText><otherTagWithNumbers>456</otherTagWithNumbers>

我需要仅检索标记[\d]中的数字(<msgText>)才能替换它们。在这种情况下,正则表达式将返回3和0。

到目前为止我所拥有的:

(<msgText>)([\s\S]*?)(<\/msgText>)

Here我有一个这种情况的例子。

2 个答案:

答案 0 :(得分:1)

您正在尝试使用正则表达式again...

解析XML

但是,这可能适用于您正在处理的一些非常有限的XML子集:

switch (x) { 
  case 1: 
  //... 
  break;
  case 2: 
  //... 
  break;
  case 3: 
  //... 
  break;
  default: 
  //...
}

Demo

答案 1 :(得分:1)

你想用一个积极的先行来看但不消费:

\d+(?=(?:(?!<\/?\w+>).)*<\/msgText>)

故障:

  • \d+匹配任意数字
  • (?=接下来是

    • (?:(?!<\/?\w+>).)*一个顽固的贪婪令牌来匹配任何东西但不匹配 传递标签
    • <\/msgText>最后一个结束标记
  • )积极前瞻的结束

以上是一个严格的匹配,但在某些情况下有一个简短的方法来实现相同的目标:

\d+(?=[^<]*<\/msgText>)

Live demo