我正在尝试将以下字符串与正则表达式进行比较:
@[xyz="1","2"'"4"] ------- valid
@[xyz] ------------- valid
@[xyz="a5","4r"'"8dsa"] -- valid
@[xyz="asd"] -- invalid
@[xyz"asd"] --- invalid
@[xyz="8s"'"4"] - invalid
有效模式应为:
@[xyz
然后=
签署一些字符然后,
然后一些字符然后'
然后是一些字符,最后是]
。这意味着如果xyz
之后有字符,则它们必须采用格式="XXX","XXX"'"XXX"
。@[xyz]
。 xyz
之后没有字符。我试过跟随正则表达式,但它没有奏效:
String regex = "@[xyz=\"[a-zA-z][0-9]\",\"[a-zA-z][0-9]\"'\"[a-zA-z][0-9]\"]";
此处引用(部分在xyz之后)是可选的,引号之间的字符数也不固定,在此模式之前和之后也可能有一些字符,如asdadad @[xyz] adadad
。
答案 0 :(得分:2)
使用此:
String regex = "@\\[xyz(=\"[a-zA-z0-9]+\",\"[a-zA-z0-9]+\"'\"[a-zA-z0-9]+\")?\\]";
当你写[a-zA-z][0-9]
时,它需要一个字母字符和一个数字。你也必须逃避第一个和最后一个方括号,因为方括号在正则表达式中具有特殊含义
的说明:强>
[a-zA-z0-9]+
表示字母数字字符(但不是下划线)一次或多次
(=\"[a-zA-z0-9]+\",\"[a-zA-z0-9]+\"'\"[a-zA-z0-9]+\")?
表示括号中的表达式可以是一次或不是。
答案 1 :(得分:2)
由于方括号在正则表达式中具有特殊含义,因此您自己使用它们,它们定义了字符类,如果要按字面意思匹配它们,则需要将它们转义。
String regex = "@\\[xyz=\"[a-zA-z][0-9]\",\"[a-zA-z][0-9]\"'\"[a-zA-z][0-9]\"\\]";
下一个问题是''[a-zA-z] [0-9]'你定义“第一个字母,第二个数字”,你需要加入这些类并添加量词:
String regex = "@\\[xyz=\"[a-zA-z0-9]+\",\"[a-zA-z0-9]+\"'\"[a-zA-z0-9]+\"\\]";
答案 2 :(得分:2)
您可以使用正则表达式:
@\[xyz(?:="[a-zA-z0-9]+","[a-zA-z0-9]+"'"[a-zA-z0-9]+")?\]
表示为Java字符串,它将是:
String regex = "@\\[xyz=\"[a-zA-z0-9]+\",\"[a-zA-z0-9]+\"'\"[a-zA-z0-9]+\"\\]";
你的正则表达式出了什么问题?
[...]
定义了一个字符类。如果您希望匹配文字[
和]
,则需要使用\
进行转义。
[a-zA-z][0-9]
匹配一个字母后跟一位数字。但是你想要一个或多个字母数字字符。所以你需要[a-zA-Z0-9]+
答案 3 :(得分:0)
在这个模式之前和之后也可能会有一些字符
asdadad @[xyz] adadad
。
正则表达式应该是:
String regex = "(.)*@\\[xyz(=\"[a-zA-z0-9]+\",\"[a-zA-z0-9]+\"'\"[a-zA-z0-9]+\")?\\](.)*";
第一个和最后一个(.)*
将允许您在编辑中提到的模式之前的任何字符串。正如@ademiban {{3}}所说,这(=\"[a-zA-z0-9]+\",\"[a-zA-z0-9]+\"'\"[a-zA-z0-9]+\")?
会来一次或根本不会。其他错误也很好地由其他人解释为+1。