正则表达式匹配给定字符串中的后缀

regex to match a suffix in a given string

我有一个函数应该验证一个字符串不包含以下前缀 我想用

匹配每个单词
                        __test_timestamp__itemname 

部分示例如下

                       __test_1349333576093__cellphone_modelc1
                       __test_1349333576090__macbook_model_12
public boolean isvalid(String Name){
  /*pattern match to check for suffix and return true if string starts with 
    __test_timestamp_
 */
}  

此字符串中的人名可以变化,以毫秒为单位的时间戳也可以变化,但是时间戳的长度为 13 个字符,由数字组成,项目名称可以包含数字和下划线

如何编写一个函数来匹配这个模式?预先感谢您的帮助!

我不熟悉 java 但正则表达式是这样的:

^__test_[0-9]{13}__[A-Za-z0-9_]+$

^: 开始字符串

[0-9]{13}: 13 个数字

[A-Za-z0-9_]+:1 个或多个 Mayus/minus 个字符、数字和 _

$: 结束字符串

https://regex101.com/r/oWBfes/2

编辑:如果您需要更灵活的时间戳,您可以像这样设置最小值和最大值:

{11,13}

^__test_[0-9]{11,13}__[A-Za-z0-9_]+$

编辑:添加 100 最大长度:

(?=^.{0,100}$)(^__test_[0-9]{11,13}__[A-Za-z0-9_]+$)

编辑:对最后一次出现进行分组:

(?=^.{0,100}$)^__test_[0-9]{11,13}__([A-Za-z0-9_]+)$/

要抓住你想要的,用()分组

您可以按如下方式使用String#matches

public boolean isvalid(String name) {
    return name.matches("__test_\d+__\S+");
}

请注意,我们没有为时间戳分配任何固定宽度,因为您可能有一些较早的数据,其时间戳可能小于 13 位宽。