我在文件中看到如下所示的行:
Location### Location### #
其中Location是表示空格为+的城市的字符串(例如“St. + Louis,+ MO”) #是数字。我试图使用以下正则表达式模式捕获位置和数字(表示此网络拓扑文件中的唯一节点ID):
START "([A-Za-z,+.]+)([0-9]+)" SPACE "([A-Za-z,+.]+)([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END
使用C ++正则表达式库(在Ubuntu Linux上)。宏被正确定义为匹配但不捕获空间(MAYSPACE匹配0个或更多空白字符)。
我遇到的问题是这些数字的组完全是空的!如果我将这个正则表达式放入sed:
sed -rn 's/^([A-Za-z.+,]+)([0-9]+)/\1 \2/p' rocketfuel/weights/6461/latencies.intra
它完全符合预期,并捕获城市名称和节点ID!此外,如果我尝试以下匹配:
START "([A-Za-z,+.]+).([0-9]+)" SPACE "([A-Za-z,+.]+).([0-9]+)" SPACE "([0-9.]+)" MAYSPACE END
将捕获节点ID,但显然缺少第一个数字!我已经尝试将\ B非字边界锚点放在那里并且没有运气......
有没有其他人遇到过这个与不匹配的相邻群组有关的问题?有没有人有任何关于如何解决它的建议?它似乎是实际C ++库的一个错误...
我正在尝试避免使用Boost或其他外部库,所以现在我将使用sed在位置和节点ID之间添加一个空格,因为我可以解析所有内容。