Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;正则表达式不匹配相邻组?_C++_Regex - Fatal编程技术网

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

C++ C++;正则表达式不匹配相邻组?,c++,regex,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++正则表达式库(UbuntuLi

我在一个文件中有一行内容如下:

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++正则表达式库(UbuntuLinux)。宏被正确定义为匹配但不捕获空格(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之间添加一个空格,因为我可以很好地解析所有内容。

请记住,大多数编译器仍然没有完全实现C++11功能。例如,GCC只支持
regex_math
,因此您不能使用例如
regex_search
,这是4.7版的内容。GCC4.6(Ubuntu12.04中的标准版本)中对正则表达式的支持可能更不完整。我很困惑你是否真的在使用正则表达式。我想Boost实现了Unbutu的正则表达式。我认为任何C++0.xtr1也应该是。我认为,C++的Tr1的大部分实现都使用BoOS,Boost在默认情况下完全实现了Perl的完全实现。没问题!重新分发通常是一个轻量级的dll或静态库。大多数实现都是作为宏模板类编译的,所以这应该没有问题。