在最近的一次采访中,我被要求破译这个正则表达式
^\^[^^]
你能帮帮我吗?另外请提供一些链接,我可以在那里学习正则表达式。
答案 0 :(得分:30)
它将开始的字符串与^
匹配,后跟 ^
以外的任何字符。
所以它会匹配:
^foo
^b
但不是
foo
^^b
<强>解释强>
Caret(^
)是一个正则表达式元字符,有两个不同的含义:
外部字符类(在你的正则表达式中第一次使用)它作为开始锚点。
内部字符类,它的作用类似于否定 ,如果用作字符类的第一个字符(第3次使用你的正则表达式。)
在\
之前的正则表达式将其转义(使其非特殊)。您的正则表达式中^
的第二次使用是转义的,它与字符串中的文字^
匹配。
在字符类中{a} {<1}} 字符类的第一个字符在字面上处理。因此,正则表达式中的第四个用法是文字^
。
要说清楚的更多例子:
^
:匹配字符串开头
^a
a
:匹配字符串开头
^ab
后跟a
b
:匹配一个字符串
有一个[a]
a
:匹配一个字符串
没有[^a]
a
:匹配字符串
以^a[^a]
开头,后跟任意一个
a
以外的字符。答案 1 :(得分:3)
我正在测试这个正则表达式here,但它似乎没有效果。
第一个^
表示该行的开头。
第一个\
会转义以下\
。
因此,第二个“^”不会被转义
最后,方括号[^
中的第一个插入符号用作否定符号,第二个插入符号^]
不会被转义,因为结果无效。
恕我直言,正确的正则表达式应为^\^[^\^]
伙计们,请确认一下。非常感谢
答案 2 :(得分:2)
匹配行或字符串的开头 其次是文字\ 后跟行或字符串的开头 后跟任何不是空格,返回或换行符的字符
答案 3 :(得分:2)
第一个^
是行的开头。
第二个是^
的字面字符(\
是为了逃避^
的其他通常含义
第三个是说
一类不包含字符
的字符^
使用Ruby显示的一些示例:
ruby-1.9.2-p0 > "hello" =~ /^h/ # it found a match at position 0
=> 0
ruby-1.9.2-p0 > "hello" =~ /^e/ # nil means can't find it
=> nil
ruby-1.9.2-p0 > "he^llo" =~ /\^/ # found at position 2
=> 2
ruby-1.9.2-p0 > "he^llo"[/[^^]*/] # anything repeatedly but not including the ^ character
=> "he"