簡體   English   中英

將正則表達式模式從Javascript轉換為PCRE(perl)

[英]Convert Regular Expression pattern from Javascript to PCRE (perl)

這是我的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;
}

謝謝。

沒有必要轉換它,唯一需要注意的是轉義和/分隔符。

請注意,正則表達式可能不是您要在此處使用的。 或至少...不直接這樣。 有許多url解析庫更適合這項任務。 以HTParse為例。

您的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";
}
"^((\\w+):\\/\\/\\/?)?((\\w+):?(\\w+)?@)?([^\\/\\?:]+):?(\\d+)?(\\/?[^\\?#;\\|]+)?([;\\|])?([^\\?#]+)?\\??([^#]+)?#?(\\w*)"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM