【问题标题】:Please help to optimize this regex请帮助优化这个正则表达式
【发布时间】:2016-03-20 12:17:53
【问题描述】:

输入:

+ 1220     001d.a16a.9400    dynamic   0          F    F  Po10
* 1220     0021.f60f.4127    dynamic   0          F    F  Eth1/46

表达式:

\S+\s+(\d+)\s+([0-9A-Fa-f]{4}[.][0-9A-Fa-f]{4}[.][0-9A-Fa-f]{4})\s+\w+\s+\d+\s+\w+\s+\w+\s+(.*)

替换:

$1\t$2\t$3

输出:

1220    001d.a16a.9400  Po10
1220    0021.f60f.4127  Eth1/46

【问题讨论】:

  • 您使用什么语言/工具?字段数是否始终相同?
  • 什么语言和上下文。你说的优化是什么意思?它会按照您的意愿去做吗?
  • 如果您有兴趣减少回溯量以实现 O(n) 解析,请查看 Atomic GroupingPossessive Quantifiers...

标签: regex capture-group


【解决方案1】:

如果你的意思是通过“优化”缩短,试试这个:

表达式:

^.+?(\d+)\s+([^\s]+?)\s.+?([^\s]+)$

替换:

$1\t$2\t$3

也许您必须使用 /m(多行)和 /s(点匹配任何字符)开关。

PHP-示例:

<?php
  $sourcestring="+ 1220     001d.a16a.9400    dynamic   0          F    F  Po10";
  echo preg_replace('/^.+?(\d+)\s+([^\s]+?)\s.+?([^\s]+)$/ms','$1\t$2\t$3',$sourcestring);
?>

【讨论】:

  • 感谢@netblognet
猜你喜欢
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
相关资源
最近更新 更多