如何为我的字符串写一个正则表达式?

时间:2017-11-20 06:36:20

标签: regex

我想在shell脚本中为QR8.4_Z4J25编写正则表达式?我该怎么办?

这是对的吗?

[QR][0-9][.][0-9][_][A-Z][0-9][A-Z][0-9][0-9]

2 个答案:

答案 0 :(得分:1)

这显然是错误的,因为它只匹配Q8.4_Z4J25R8.4_Z4J25,而不是QR8.4_Z4J25

括号与指定的任何一个字符匹配,因此您想写:

[Q][R][0-9][.][0-9][_][A-Z][0-9][A-Z][0-9][0-9]

但是,您不需要为单个字符使用括号,因此可以将其简化为

QR[0-9]\.[0-9]_[A-Z][0-9][A-Z][0-9][0-9]

如果它位于支架之外,请务必将其脱离,否则它将匹配任何单个字符。

如果您想要匹配QR9.1_8A9YK,则应将其更改为

QR[0-9]\.[0-9]_[A-Z0-9]\{5\}

如果你正在使用Extented Regular Expression,通常是为你正在使用的工具提供选项-E,那么你就不应该逃避括号:

QR[0-9]\.[0-9]_[A-Z0-9]{5}

答案 1 :(得分:-1)

正则表达式中的方括号表示一组字符。

  • [MX_5]将匹配一个MX _5字符。
  • [0-9]将匹配09之间的一个字符。
  • [a-z]将匹配小写az之间的一个字符。

注意模式?方括号匹配单个字符。为了匹配多个字符,需要使用+*{}来表示它应匹配的字符数。

但是,在您的情况下,您只想按顺序匹配实际的字母QR,所以不要使用方括号。

QR[0-9]\.[0-9]_[A-Z][0-9][A-Z][0-9][0-9]

对于像下划线这样总是在同一个地方的字符也一样。请注意,.已使用\进行转义,因为它在正则表达式中具有特殊含义。

返回使用方括号匹配多个字符,如果最后5个字符的顺序无关紧要,您可以使用单个方括号和{}进一步缩小表达式以匹配所有字符在下划线后面跟踪字符。

QR[0-9]\.[0-9]_[A-Z0-9]{5}