正则表达式之后的一切,但不包括

时间:2018-06-01 02:21:20

标签: regex

我正在尝试使用以下字符串进行正则表达式:

https://www.amazon.com/Tapps-Top-Apps-and-Games/dp/B00VU2BZRO/ref=sr_1_3?ie=UTF8&qid=1527813329&sr=8-3&keywords=poop

我只想要B00VU2BZRO

此子字符串始终为10个字符,字母数字,前面有dp/

到目前为止,我有以下正则表达式:

[d][p][\/][0-9B][0-9A-Z]{9}

匹配dp/B00VU2BZRO

我想仅匹配B00VU2BZRO而不匹配dp/

我如何正则表达?

2 个答案:

答案 0 :(得分:3)

这是一个正则表达式选项,可以产生你想要的完全匹配:

dp/

Demo

请注意,此解决方案不会假设在(.*)之后发生的路径片段的长度。如果您想匹配一定数量的字符,请将(.{10})替换为void SendSMS(SMS SMSObject) { //CONFIGURATION URL = "https://example.com/send_ack.php"; wbLogin = "wbLogin"; wbPwd = "wbPwd"; wbAccount = "wbAccount"; label = "label"; applicationName = "ADR SMS v1.0"; //BASE64 ENCODING Base64Encoded = zoho.encryption.base64Encode("httpLogin:httpPwd"); AuthorizationBasic = "Authorization: Basic " + Base64Encoded; //HEADER HeaderMap = Map(); HeaderMap.put("content-type", "application/x-www-form-urlencoded"); HeaderMap.put("Authorization", AuthorizationBasic); //REQUEST RequestMap = Map(); RequestMap.put("compte", wbAccount); RequestMap.put("op", 1); RequestMap.put("type", 0); RequestMap.put("dt", zoho.currentdate.getDay()); RequestMap.put("hr", zoho.currenttime.getHour()); RequestMap.put("mn", zoho.currenttime.getMinutes()); RequestMap.put("label", label); RequestMap.put("dest_num", "phone_number"); RequestMap.put("msg", "ZC Testing"); RequestMap.put("ref", "ZC"); //CALL POSTURL Result = postUrl(URL, RequestMap, HeaderMap, false); //DEBUG info Result; } ,例如。

答案 1 :(得分:1)

根据您的语言/应用方法,您有几种选择。

  1. 积极展望。这将使你的正则表达式更复杂,但会使它与你想要的完全匹配:

    (<=dp/)[0-9A-Z]{10}
    

    构造(<=...)被称为背后的正面看法。它不会消耗任何字符串,但只会在匹配的parens之间的模式允许匹配时发生。

  2. 捕获论坛。这将使正则表达式本身稍微简单一些,但会为提取过程添加一个步骤:

    dp/([0-9A-Z]{10})
    

    朴素的parens之间的任何东西都是一个捕获组。整个模式将匹配,包括dp/,但大多数语言将为您提供一种提取您感兴趣的部分的方法。

  3. 根据您的语言,您可能需要转义正斜杠(/)。

    顺便说一句,你永远不需要为单个字符创建一个字符类:[d][p][\/]同样可以写成dp\/