C ++正则表达式与相邻组不匹配?

时间:2012-08-12 22:46:51

标签: c++ regex

我在文件中看到如下所示的行:

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之间添加一个空格,因为我可以解析所有内容。

0 个答案:

没有答案