Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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
将正则表达式模式从Javascript转换为PCRE(perl)_Javascript_C++_Regex_Pcre - Fatal编程技术网

将正则表达式模式从Javascript转换为PCRE(perl)

将正则表达式模式从Javascript转换为PCRE(perl),javascript,c++,regex,pcre,Javascript,C++,Regex,Pcre,这是我的javascript正则表达式模式: url = "http://www.amazon.com/gp"; hostname = /^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)/.exec(url) || []; // would return "www.amazon.c

这是我的javascript正则表达式模式:

    url = "http://www.amazon.com/gp";    
    hostname = /^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)/.exec(url) || [];
// would return "www.amazon.com"
  • 上面的正则表达式从给定的url提取主机名。 我需要这一行使用pcre(c++)工作。 如您所见,我已经在每个'\'中添加了另一个'\',但它仍然不起作用
要使它在pcre代码而不是javascript中工作,我还需要做哪些额外的更改?或者这是不可能的,我需要建立一个全新的模式,让它在pcre中工作

这是我的代码的简单版本:

int main(void)
{
    string text = "http://www.amazon.com";
    string hostname;
    pcrecpp::RE re("^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)");
    if(re.PartialMatch(text, &hostname)) 
    {
        std::cout << "match: " << hostname << "\n";
    }else{
        std::cout << "no match. \n";
    }       
    return 0;
}
int main(无效)
{
字符串文本=”http://www.amazon.com";
字符串主机名;
pcrecpp::RE(“^(\\\\\\\/\\\\/\\\/\/?)(\\w+):?”([^\\/\?:]+):?(\\d+)(\\/?[^\?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\/\/?)([^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
if(关于PartialMatch(文本和主机名))
{

std::cout不需要转换它,唯一需要注意的是转义和/分隔符

请注意,正则表达式可能不是您希望在此处使用的。或者至少…不是直接使用的。有许多url解析库更适合此任务。例如

<>你的C++代码应该工作,但是你的正则表达式有很多可选的组,所以很难确定主机名会在什么组结束。 尽管我的编辑可能有点黑客味,但我的编辑可以处理这个输入

string text = "http://www.amazon.com";
string tmp;
string hostname;
pcrecpp::RE re("^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)");
if(re.PartialMatch(text, &tmp, &tmp, &tmp, &tmp, &tmp, &hostname))
{
    std::cout << "match: " << hostname << "\n";
}else{
    std::cout << "no match. \n";
}
string text=”http://www.amazon.com";
串tmp;
字符串主机名;
pcrecpp::RE(“^(\\\\\\\/\\\\/\\\/\/?)(\\w+):?”([^\\/\?:]+):?(\\d+)(\\/?[^\?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\/\/?)([^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
if(关于PartialMatch(文本、&tmp、&tmp、&tmp、&tmp、&tmp、&tmp和主机名))
{

std::cout不需要转换它,唯一需要注意的是转义和/分隔符

请注意,正则表达式可能不是您希望在此处使用的。或者至少…不是直接使用的。有许多url解析库更适合此任务。例如

<>你的C++代码应该工作,但是你的正则表达式有很多可选的组,所以很难确定主机名会在什么组结束。 尽管我的编辑可能有点黑客味,但我的编辑可以处理这个输入

string text = "http://www.amazon.com";
string tmp;
string hostname;
pcrecpp::RE re("^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)");
if(re.PartialMatch(text, &tmp, &tmp, &tmp, &tmp, &tmp, &hostname))
{
    std::cout << "match: " << hostname << "\n";
}else{
    std::cout << "no match. \n";
}
string text=”http://www.amazon.com";
串tmp;
字符串主机名;
pcrecpp::RE(“^(\\\\\\\/\\\\/\\\/\/?)(\\w+):?”([^\\/\?:]+):?(\\d+)(\\/?[^\?\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/\\\\\\\\\\\/\/?)([^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
if(关于PartialMatch(文本、&tmp、&tmp、&tmp、&tmp、&tmp、&tmp和主机名))
{

STD::我应该怎么做“/定界符”?@ ByyyNoal:这是不正确的,在C++版本的PCRE中,你不需要分隔符。而且,你通常不需要使用/作为定界符,大多数其他分隔符也可以工作。我应该怎么做“/定界符”?@ ByyyNoal:这是不正确的,在PCRE的C++版本中,你不需要分隔符。而且,通常你不必使用/作为定界符,大多数其他分隔符也可以工作。