gpt4 book ai didi

regex - 编写验证此字符串的模式的更好方法是什么?

转载 作者:行者123 更新时间:2023-12-04 18:17:27 25 4
gpt4 key购买 nike

我想编写一个以类名开头并在类名之间有点并以类名结尾的正则表达式模式
每个类名,以一个字母开头。就像java中的类导入,

我写了这个模式,但它太复杂而且验证速度太慢,我认为它不能正常工作

^([a-zA-Z]([0-9]|_|[a-zA-Z])*)(([a-zA-Z]([0-9]|_|[a-zA-Z])*)|\\.)*([a-zA-Z]([0-9]|_|[a-zA-Z])*)$

例如我的输入字符串应该是这样的:“com.casp.common.StringUtils”

最佳答案

首先,简化:

[0-9]|_|[a-zA-Z]

可以组合为
[0-9_a-zA-Z]

实际上它有一个速记表示
\w

所以您的正则表达式可以首先简化为这种等效形式:
^([a-zA-Z](\w)*)(([a-zA-Z](\w)*)|\.)*([a-zA-Z](\w)*)$

现在,我们可以通过删除一些冗余捕获组来进一步简化, 打开不区分大小写的匹配 :
^[a-z]\w*([a-z]\w*|\.)*[a-z]\w*$

当然这个正则表达式是不正确的,它匹配 a....b , 例如。

问题是因为 \.是“替代品”,不应该是,因为每个组件之间都需要一个点。所以它可能应该转换为:
^[a-z]\w*([a-z]\w*\.)*[a-z]\w*$

但它仍然不正确,因为它不会匹配 a.b , 因为前导部分。我们需要删除它:
^([a-z]\w*\.)*[a-z]\w*$

并可能重新排列它,使重复部分位于末尾,而不是开头:
^[a-z]\w*(\.[a-z]\w*)*$

关于regex - 编写验证此字符串的模式的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11381557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com