繁体   English   中英

正则表达式忽略字符后的所有内容

[英]Regex ignore everything after a character

我有以下正则表达式。

^(.*[^0-9])([0-9A-Fa-f]{8}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{12})(.*)$

它将给定的文本分成 3 组。 1:Pre-GUID , 2:GUID3:post-GUID文本。

Input: /user/questions/9c8a8823-d88c-4402-a2c1-4530a966f993/help

Results:
Group 1: /user/questions/
Group 2: 9c8a8823-d88c-4402-a2c1-4530a966f993
Group 3: /help

但是,我有一些实例,其中 GUID 后跟一个特殊字符,例如@ ,在这种情况下,我想忽略 GUID 忽略后的所有内容,即 GUID 后的第 3 组为空。

Input: /user/questions/9c8a8823-d88c-4402-a2c1-4530a966f993@help

Results:
Group 1: /user/questions/
Group 2: 9c8a8823-d88c-4402-a2c1-4530a966f993
Group 3: 

换句话说,我不希望正则表达式在遇到@时考虑任何事情。

如果您希望第三组为none ,您可以将其替换为:

([^@:].*$)?

如果你想让第三组为,你可以使用:

([^@:].*$|)

这将查找@: 您可以根据需要在否定字符 class 中添加更多字符。

演示


不过,我倾向于推荐另外一项改进。 目前,您的模式将匹配在某些地方有连字符但在其他地方没有的 GUID。 为了解决这个问题,我们可以在捕获组中添加第一个连字符,并将后续的连字符替换为反向引用:

^(.*[^0-9])([0-9A-Fa-f]{8}(-?)[0-9A-Fa-f]{4}\3[0-9A-Fa-f]{4}\3[0-9A-Fa-f]{4}\3[0-9A-Fa-f]{12})([^@:].*$)?

演示

请注意,在这种情况下,最后一部分将在第 4 组而不是第 3 组中。

如果我理解正确的话,如果字符串的最后一部分是:<whatever>@<whatever>组 3 应该是空的:

^(.*[^0-9])([0-9A-Fa-f]{8}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{4}[-]?[0-9A-Fa-f]{12})([^:@].*$|)

正则表达式演示。


只有最后一组更改为([^:@].*$|) - 匹配任何字符,但: / @到字符串结尾或匹配空字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM