我正在尝试使用以下字符串进行正则表达式:
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/
我如何正则表达?
答案 0 :(得分:3)
这是一个正则表达式选项,可以产生你想要的完全匹配:
dp/
请注意,此解决方案不会假设在(.*)
之后发生的路径片段的长度。如果您想匹配一定数量的字符,请将(.{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)
根据您的语言/应用方法,您有几种选择。
积极展望。这将使你的正则表达式更复杂,但会使它与你想要的完全匹配:
(<=dp/)[0-9A-Z]{10}
构造(<=...)
被称为背后的正面看法。它不会消耗任何字符串,但只会在匹配的parens之间的模式允许匹配时发生。
捕获论坛。这将使正则表达式本身稍微简单一些,但会为提取过程添加一个步骤:
dp/([0-9A-Z]{10})
朴素的parens之间的任何东西都是一个捕获组。整个模式将匹配,包括dp/
,但大多数语言将为您提供一种提取您感兴趣的部分的方法。
根据您的语言,您可能需要转义正斜杠(/
)。
顺便说一句,你永远不需要为单个字符创建一个字符类:[d][p][\/]
同样可以写成dp\/
。