正则表达式帮助java

时间:2012-02-13 10:31:40

标签: java regex

我正在尝试将以下字符串与正则表达式进行比较:

@[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

4 个答案:

答案 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]+\"\\]";

here on Regexr

答案 2 :(得分:2)

您可以使用正则表达式:

@\[xyz(?:="[a-zA-z0-9]+","[a-zA-z0-9]+"'"[a-zA-z0-9]+")?\]

See it

表示为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。