这个正则表达式意味着什么?

时间:2010-11-03 11:39:50

标签: java regex

在最近的一次采访中,我被要求破译这个正则表达式

^\^[^^]
你能帮帮我吗?另外请提供一些链接,我可以在那里学习正则表达式。

4 个答案:

答案 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"