我很难找到可以匹配这些字符串的正则表达式:
@OSMHO:6:75
@4F0SO:5:56
@40KIR:5:15
@VDXBC:4:13
@WYRRA:6:59
@A4AUN:1118:803
正如你们所看到的,这些字符串以“@”开头,后跟 5 个字母数字字符,然后是“:”,然后是一个数字,然后是另一个“:”,然后是另一个数字。 非常感谢您的帮助。
最佳答案
要匹配模式开头的 @
,请使用 ^
(行开头),后跟 @
。因此,您的模式以^@
开头。
字母数字表示 a-z、A-Z 和 0-9 中的任何字母。当您想要在正则表达式中表示“以下字符之一”时,语法是将字符集括在 []
中。在本例中,它看起来像 [a-zA-Z0-9]
。如果您想要其中五个,您可以在字符集后使用 {5}
。您的表达式现在看起来像 ^@[a-zA-Z0-9]{5}
冒号只是冒号:
。多位数字意味着您需要一位或多位数字。数字表示为[0-9]
(即:0 到 9 之间的数字之一)。 “一个或多个”用+
表示。因此,要添加冒号、一位或多位数字、冒号和一位或多位数字,您需要添加 :[0-9]+:[0-9]+
。您的模式现在如下所示:^@[a-zA-Z0-9]{5}:[0-9]+:[0-9]+
。
您还可以使用简写 \d
来表示“数字”,因此您也可以编写^@[a-zA-Z0-9]{5}:\d+ :\d+
,尽管这可能很棘手,因为您可能需要额外的反斜杠,具体取决于您用来定义该表达式的引号类型。有时,最简单的方法是避免使用反斜杠的快捷方式,以使模式更易于理解,尤其是当您第一次学习如何使用正则表达式时。
如果您想捕获组中匹配的每个部分,可以使用括号。例如,您可以执行 ^@([a-zA-Z0-9]{5}):([0-9]+):([0-9]+)
,这将把一组中 @
和第一个 :
之间的值,第二组中两个冒号之间的值,以及第三组中最后一个冒号之后的值。如果您只关心是否有匹配项而不是想要匹配项的每个单独部分,则可以省略括号。
如果您按照我刚才的方式构建一个模式(一次处理一个部分),则正则表达式会非常容易。
关于java - 代码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022067/