我正在尝试将以下字符串与正则表达式进行比较:
@[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
.
最佳答案
您可以使用正则表达式:
@\[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]+
关于java - Java 中的正则表达式帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258953/