最近我接受了一次采访,被要求解读这个正则表达式
^\^[^^]
你能帮我解决一下这个问题吗?也请提供一些关于正则表达式面试的学习链接。
最近我接受了一次采访,被要求解读这个正则表达式
^\^[^^]
你能帮我解决一下这个问题吗?也请提供一些关于正则表达式面试的学习链接。
它匹配以^
开始,后跟任何一个字符(除了^
)的字符串。
因此,它会匹配:
^foo
^b
但不是
foo
^^b
解释:
Caret(^
)是一个正则表达式元字符,具有两种不同的含义:
在字符类之外(你的正则表达式中的第一次使用),它作为起始锚点工作。
当^
作为字符类第一个字符使用(你的正则表达式中的第三次使用)时,它在字符类内部充当否定字符。
通过在正则表达式前面添加\
对其进行转义(使其变为普通字符)。你的正则表达式中的第二次使用的^
被转义,并且它匹配字符串中的字面量^
。
在字符类中,不是字符类第一个字符的^
会被视为字面量。因此,你的正则表达式中的第四次使用是一个字面量的^
。
以下是更多示例,以使其更清晰:
^a
:匹配以 a
开头的字符串^ab
:匹配以 a
开头,后跟b
的字符串[a]
:匹配包含 a
的字符串[^a]
:匹配不包含 a
的字符串^a[^a]
:匹配以 a
开头,后跟除 a
之外的任何字符的字符串^
表示行的开头。\
转义了后面的\
。[^
作为否定,第二个插入符^]
没有被转义,结果无效。
我认为正确的正则表达式应该是^\^[^\^]
大家能确认一下吗?非常感谢。
匹配行首或字符串开头, 紧跟着一个字面上的反斜杠, 再紧跟着行首或字符串开头, 最后紧跟着任何非空格、回车或换行符的字符。
(?m)
模式,否则不能通过^
拥有两个字符串/行标记。最明显的答案是它匹配以插入符号后跟任何非插入符号字符开头的行,但由于愚蠢的Java松散反斜杠,这很难说清楚。 - tchrist第一个^
是行的开头。
第二个^
是字面上的字符 (\
是为了转义^
的其他常见含义)。
第三个是表示
不包括字符
^
的一类字符
以下是使用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"
^
开头的字符串。而这个^
是匹配的一部分("^hel^lo" -> "^hel")。 - Andreas Dolk^
,这是您的意思吗? - nonopolarity