Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
Regex C+上的Bug+;11在Ubuntu 14.04(g+;+;/clang)上运行时使用正则表达式,但不在Windows(mingW)中使用_Regex_Linux_C++11_Ubuntu 14.04 - Fatal编程技术网

Regex C+上的Bug+;11在Ubuntu 14.04(g+;+;/clang)上运行时使用正则表达式,但不在Windows(mingW)中使用

Regex C+上的Bug+;11在Ubuntu 14.04(g+;+;/clang)上运行时使用正则表达式,但不在Windows(mingW)中使用,regex,linux,c++11,ubuntu-14.04,Regex,Linux,C++11,Ubuntu 14.04,我需要使用C++11正则表达式解析文件(不是Boost,不是外部库,不是调用bash或python例程,等等) 首先,我需要丢弃不包含任何URL域的行 然后,从这些保留的行中,我需要提取域并将它们返回到容器中 示例:从,我只需要保留:www.xjr.com 因此,我建立了自己的以下正则表达式: std::regex urlRgx("((([[:print:]])?)*(https|http)://(www|ww2|web))\\. ([[:alnum:]]{2,256}.[[:alpha:]]{

我需要使用C++11正则表达式解析文件(不是Boost,不是外部库,不是调用bash或python例程,等等)

首先,我需要丢弃不包含任何URL域的行

然后,从这些保留的行中,我需要提取域并将它们返回到容器中

示例:从,我只需要保留:www.xjr.com

因此,我建立了自己的以下正则表达式:

std::regex urlRgx("((([[:print:]])?)*(https|http)://(www|ww2|web))\\.
([[:alnum:]]{2,256}.[[:alpha:]]{2,4})((/([[:alnum:]])?)*(([[:print:]])?)*)");
由于不同的原因(以及正则表达式不兼容带来的麻烦),我在Windows 10下(使用MinGW:g++-6.*)以代码块16.01完成了编译和运行程序,没有任何问题

但是,当我来到我想要的环境Ubuntu14.04时,程序编译成功,但在运行时,它只是被卡住了,没有提供任何输出

总是在Ubuntu 14.04中,我尝试:

  • 使用g++-6.*和clang3.8在代码块16.01上编译。结果:没有输出

  • 使用相同的编译器从命令行编译。结果:没有输出

  • 注意:我运行程序,但它永远不会结束;它只是被卡住了,光标在闪烁

    当然,我对regex进行了注释,并尝试了其他输出,最终确定问题出在regex本身

    我想知道minGW是否在Windows中进行了一些“自动”转换,这在正则表达式中隐藏了一些错误。然后,在POSIX中,它根本不起作用


    您能提供一些有用的建议吗?

    哪些部分带有
    (…)?)*
    ?在我看来,它们可以以无限多的方式匹配空字符串,这听起来不太明智。我认为正则表达式出于某种原因是病态的,这可能是我的第一个怀疑。第一部分和第三部分:(([:print:])?)*:它寻找任何可打印的字符,这些字符可以存在或不存在(?)以及任意数量的字符(*)。请考虑,域可能存在于(或不)在字符串的任何部分中。第二部分:查找字母数字字符,如:“/my_folder/index.html”。因此,没有空字符串。“是否存在任何数量”是星号本身的作用。不需要?。问号:“是否出席”;星号:“以前的任何数量”。所以:如果存在某种东西(“?”)(可打印等),它可以以任何数量(“*”)存在。如果不存在,则为“任何数量的零”。示例1:flasjfña jffjñsa!eqson234%%%mydoimain.org fahfñal)(在这种情况下,由于mydomain.org前后都存在垃圾,因此我需要丢弃垃圾并只保留mydomain.org(同时丢弃子域、文件夹等)例2:urpoeurpqpruqwerupurepq urpouqrpoqurepq r在本例中,我需要拒绝所有行:无域。您缺少“任何金额”包括“零金额”。因此
    [:print:][]*
    完成了您对
    的所有期望(([:print:])?)*
    :它匹配任何非空的可打印字符序列以及空字符串。尝试一下。
    (…)的部分是什么*
    ?在我看来,它们可以以无限多的方式匹配空字符串,这听起来不太正常。我认为正则表达式出于某种原因是病态的,这可能是我的第一个怀疑。第一部分和第三部分:([[:print:]]?)*:它查找任何可打印的字符,这些字符可以存在或不存在(?)以及任意数量的(*)请考虑,域可能存在于(或不)字符串的任何部分。第二部分:查找字母数字字符,如:“/My文件夹/ index .html”。因此,没有空字符串。“无论是否存在”都是星号唯一所做的。无需问号:“现在或否”;星号:“以前的任何数量”。因此,如果某个东西存在(“?”)(可打印等),它可以以任何数量(“*”)存在。如果它不存在,那么它就是“任何数量的零”。示例1:flasjfña jffjñsa!eqson234%%%mydoiman.org fahfñal)(/$”kk:在这种情况下,由于mydomain.org前后都存在垃圾,我需要丢弃垃圾并只保留mydomain.org(同时丢弃子域、文件夹等)。示例2:urpoeurpqpruqwerupurepq urpouqrpoqurepq r在这种情况下,我需要拒绝所有行:那里没有域。您缺少“任何金额”包括“零金额”。因此,
    [[:print:]*
    完成了您对
    (([:print:]])?)*
    的所有期望:它匹配任何非空的可打印字符序列以及空字符串。请尝试一下。