正则表达式匹配从第一个下划线到最后一个下划线的值

Regex matches value from first underscore to last underscore

我有一个正则表达式,它应该匹配字符串并在 </code> <code></code>.</p> 中保留值 <p>下面是字符串:</p> <pre><code>Node=LTE03:File=/PMloc/dir22/XML/Network=ARX_ROOT_AO,Network=LTE,Network=Base,Manage=LTE,Element=LTE03/A20210115.1545+0530-1600+0530_Network=ARX_ROOT_AO,Network=LTE,Network=Base,Manage=LTE,Element=LTE03_file.xml.gz:Unit=U-3,Meter=1

我想要以下值:

</code> => <code>Network=ARX_ROOT_AO,Network=LTE,Network=Base,Manage=LTE,Element=LTE03
</code> => <code>A20210115.1545+0530-1600+0530
</code> => <code>Unit=U-3

这是我的表达:

File=([^_]+(?=_))_(\S+)_file.xml(.\S+)?:(\S+),

上面的表达式 </code> 包含从第一个下划线 (<code>_) 到最后一个下划线 (_) 的值。因此 </code> 无法获得所需的时间值。只有 <code> 给了我适当的价值。

如何通过在 Perl 中使用正则表达式来获得我上面提到的需要的值?

您可以通过对 _ 以及 /: 使用否定字符 class 来获得 4 个组,以不交叉某些字符。

您可以微调模式以在匹配项之间添加或排除更多字符。

File=[^=]+/(\w+=[^/]+)/([^_]+)[^:\s]*file\.xml(\.[^:\s]*):([^,\s]*)

说明

  • File=[^=]+/ 匹配 File= 后跟除 = 之外的任何字符并匹配 /
  • (\w+=[^/]+) 组 1,匹配 1+ 个单词字符后跟 = 和除 /
  • 之外的任何字符
  • /字面匹配
  • ([^_]+) 组 2 匹配除 _
  • 之外的任何字符
  • [^:\s]*file\.xml 匹配除 : 以外的任何字符或空白字符,然后匹配 file.xml
  • (\.[^:\s]*) 第 3 组,匹配 . 和除 : 或空白字符
  • 之外的任何字符
  • :字面匹配
  • ([^,\s]*) 第 4 组,匹配除空白字符或逗号之外的任何字符

Regex demo