1)mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]'; -> 1
2)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]$'; -> 0
3)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]?$'; -> 0 // 0 or 1
4)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]+$'; -> 1 // 1 or more
5)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]*$'; -> 1 //0 or more
我对第二次比较感到困惑。这不是指以[a-dXYZ]开头并以[a-dXYZ]结尾的字符串吗?
或者它是指以[a-dXYZ]开头并以[a-dXYZ]结尾的字符串,其长度为1?如果这是真的,使用^和$符号如'^ .... $'(最左边和最右边)消除所有子串并仅分析整个字符串 - 是吗?
注意:这不是我怎么能提出问题的。我想了解因果关系。
答案 0 :(得分:2)
^[a-dXYZ]$
只会匹配一个字符:a
,b
,c
,d
,X
,{{1 },Y
并且是第一个字符,也是最后一个字符。所以你的第二个观察是非常直接的。
Z
表示输入开始,^
表示输入结束。
您可以使用$
重复0次或更多次,或*
重复1次或更多次:
+
如果要匹配以^[a-dXYZ]+$
开头和结尾的字符串,可以使用以下内容:
[a-dXYZ]
在某些正则表达式实现中,您可以使用^[a-dXYZ].*[a-dXYZ]$
# ^ Match anything zero or more times
修饰符,这将使m
和^
匹配行的开头和结尾,而不是输入,请考虑以下Perl代码段:
$
它将替换所有仅一致的行:
s/^1+$/_/gm