使用通配符的正则表达式匹配任何字符

时间:2012-10-01 16:21:25

标签: regex

我是regex的新手,我正在努力想出一些与下面的文字相符的内容:

ABC:(z)1999年1月2日\ n

注意:

  • 文字将始终以“ABC:”
  • 开头
  • ':'和(z)之间可能有零个,一个或多个空格。
  • (z)的变化也可能 - (zz),(zzzzzz)..等但总是a “()”中包含的非数字字符
  • 可能有零个,一个或多个 (z)和jan之间的空格
  • jan可能是jan,january等
  • 日期可以是任何格式,可能/可能不包含其他文本作为其中的一部分 我真的想知道是否有一个我可以用来捕获的正则表达式 在'(z)'和'\ n'
  • 之间找到的任何东西

非常感谢任何帮助!谢谢

3 个答案:

答案 0 :(得分:34)

以下内容应该有效:

ABC: *\([a-zA-Z]+\) *(.+)

说明:

ABC:            # match literal characters 'ABC:'
 *              # zero or more spaces
\([a-zA-Z]+\)   # one or more letters inside of parentheses
 *              # zero or more spaces
(.+)            # capture one or more of any character (except newlines)

要根据以下评论获得所需的分组,您可以使用以下内容:

(ABC:) *(\([a-zA-Z]+\).+)

答案 1 :(得分:4)

在不知道您正在使用的确切正则表达式实现的情况下,我只能提供一般性建议。 (语法我将perl,因为我知道,有些语言需要调整)

查看ABC: (z) jan 02 1999 \n

  • 要匹配的第一件事就是ABC:所以使用我们的正则表达式是/ABC:/
  • 你说ABC总是在字符串的开头,所以/^ABC/将确保ABC位于字符串的开头。

  • 您可以使用\s(注意案例)指令匹配空格。使用所有指令,您可以将一个或多个指令与+匹配(或与*匹配0或更多)

  • 您需要转义()的使用,因为它是保留字符。所以\(\)

  • 您可以使用.

  • 匹配任何非空格或换行符
  • 你可以使用.*匹配任何内容,但是你需要小心,不要过于贪婪并抓住所有内容。

所以为了捕捉你所问的内容。我会使用/^ABC:\s*\(.+?\)\s*(.+)$/

我读作:

  

从ABC开始:

     

可能有一些空格

     

有(

     

有一些字符

     

有)

     

可能有一些空格

     然后

捕获所有内容,直到行尾($)。

我强烈建议保留以下内容的副本 http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

答案 2 :(得分:1)

这应该符合您的要求。

ABC:\s*(\(\D+\)\s*.*?)\\n

这是一些测试http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDgsSBlJlY2lwZRiEjiUM/index.html

继续阅读正则表达式:http://www.regular-expressions.info/characters.html