Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 用于匹配具有4-6位ID的URL的正则表达式_Regex_Regex Negation_Regex Lookarounds_Regex Group_Regex Greedy - Fatal编程技术网

Regex 用于匹配具有4-6位ID的URL的正则表达式

Regex 用于匹配具有4-6位ID的URL的正则表达式,regex,regex-negation,regex-lookarounds,regex-group,regex-greedy,Regex,Regex Negation,Regex Lookarounds,Regex Group,Regex Greedy,我正在尝试匹配以“example.com/”开头,后跟4-6位数字的URL,并且下一个字符不是数字(如果有下一个字符) 例如,“example.com/12345”应该匹配 “example.com/1234567”不应匹配 “example.com/123456g7”应该匹配 我尝试了“example.com/(\d{4,6})。*”但是当我给它“example.com/1234567”这是不正确的时,它匹配 我如何解决这个问题 匹配4到6个数字后,只需对数字进行负前瞻: example.co

我正在尝试匹配以
“example.com/”
开头,后跟4-6位数字的URL,并且下一个字符不是数字(如果有下一个字符)

例如,
“example.com/12345”
应该匹配

“example.com/1234567”
不应匹配

“example.com/123456g7”
应该匹配

我尝试了
“example.com/(\d{4,6})。*”
但是当我给它
“example.com/1234567”
这是不正确的时,它匹配


我如何解决这个问题

匹配4到6个数字后,只需对数字进行负前瞻:

example.com\/\d{4,6}(?!\d).*

另一种方法


^example\.com/(\d{4,6})(?:\d.*)$

此表达式添加附加边界只是为了安全地传递所需的URL:

^(https?:\/\/(www.)?)(example\.com)\/(?:[0-9]{4,6})?([a-z].*)?$
如果你愿意,你可以减少边界。在这里,我们可以添加几个捕获组以便于调用

$
是使不希望的URL输入失败的键

正则表达式 如果这不是您想要的表达式,您可以在中修改/更改表达式

正则表达式电路 您还可以在以下位置可视化您的表达式:

JavaScript演示
const regex=/^(https?:\/\/(www.))(example\.com)\/(?:[0-9]{4,6})([a-z].*)$/gm;
常量str=`http://example.com/12345
https://example.com/123456g7
http://www.example.com/12345
https://www.example.com/123456g7
http://www.example.com/12345
https://www.example.com/123456g7
http://www.example.com/123456adfasdfasdf98989898
https://www.example.com/123456g7adfadfa0909009
http://example.com/1234567
https://example.com/1234567`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});

}
(?:\D.*)
中的冒号是什么意思?@user101-它是3个字符的
(?:
非捕获组构造开头的一部分。在这种情况下,它用于告诉引擎它的内容
\D.
,因为组是可选的。