如何在此正则表达式中使用两个通配符?

时间:2011-05-06 06:37:37

标签: regex

试图获得以下正则表达式:< - 来自我的坏英语:(

我正在尝试将以下输入文本转换为正则表达式...

xx.*.aaa.bbb*

其中*是通配符..在...中它们代表通配符给我 ..而不是正则表达式语法。

有什么建议吗?

更新 - 示例输入。

  • xx.zzzzzzzzz.aaa.bbb = match
  • xx.eee.aaa.bbbzzzz = match
  • xx.eee.aaa.bbb.zzzz = match
  • xx.aaa.bbb =不匹配

5 个答案:

答案 0 :(得分:2)

你在正则表达式中误解了*的概念。

我认为你在寻找的是:

xx\..*\.aaa\.bbb.*

事情是:

  • .不是真正的.。这意味着任何字符,因此如果您想匹配.,则必须将其转义:\.
  • *表示其前面的字符将匹配0次或多次,那么如何模拟您要查找的通配符?使用.*。它将匹配任意字符0或多次

如果您想匹配完全匹配整个字符串,以及而不是匹配该模式的任何子字符串,则必须在开头包含^并{ {1}}最后,你的正则表达式将是:

$

答案 1 :(得分:1)

试试这个表达式:

^xx\.[^\.]+\.aaa\.bbb.*

答案 2 :(得分:0)

*不是通配符,它​​们表示前面的字符重复0或1次或多次。

点可以是任何角色。

<强>更新

你可以试试这个

^xx\.[a-z]+\.aaa\.bbb\.?[a-z]*

您可以测试它,例如here online on rubular

[a-z]是字符组,您可以在其中定义允许的字符(或使用[^a-z]不允许)。因此,如果您只是寻找小写字母,那么您可以使用[a-z]

+表示它必须至少有一次。

靠近末尾的\.?表示可以有一个点或不是

开头的^表示在字符串的开头匹配

一个很好的教程(对于Perl,但至少基本上几乎无处不在)是PerlReTut

答案 3 :(得分:0)

假设你说*是'正常意义'中的通配符,并且你的字符串不是正则表达式的尝试,我会说xx\..+\.aaa\.bbb.+就是你所追求的。

答案 4 :(得分:0)

您所说的“通配符 - 非正则表达式语法”来自globbing。这是一种模式matchnig技术,在60年代后期的第一个Unix版本中普及。最初它是一个单独的程序 - 称为glob - 产生了一个可以通过管道输送到其他程序的结果。现在bash,MS-Dos和几乎所有的shell都内置了这个功能。在通配符*中通常意味着匹配任何字符,任意次数

正则表达式语法不同。正则表达式中的.*成语与globbing中的*类似,但不完全相同。通常,.* doesn't match line-breaks。如果希望.*匹配任何字符,任何数量,您通常必须设置单行模式(在Ruby中称为多行)在正则表达式中