试图获得以下正则表达式:< - 来自我的坏英语:(
我正在尝试将以下输入文本转换为正则表达式...
xx.*.aaa.bbb*
其中*是通配符..在...中它们代表通配符给我 ..而不是正则表达式语法。
有什么建议吗?
答案 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中称为多行)在正则表达式中。