Java正则表达式,匹配除文本字符串以外的任何内容';无';或';无';
好的,伙计们。这里有一个Java面试类型的问题,似乎已经难住了这里一些非常聪明的人。他们实际上需要这个来制作代码,所以这不仅仅是一个面试难题 它们需要一个Java正则表达式,如果字符串文本不是3个字母的NIL,则该正则表达式将返回true。测试需要不区分大小写,并且正则表达式本身必须完成所有工作 因此,正则表达式应该拒绝NIL、NIL、NIL、NIL、等等 但是,它应该接受:nile、anil、will、zappa-nil-a和空字符串 编写一个简单的正则表达式需要多少Java开发人员?显然很多 您可以使用一个 启用不区分大小写选项时:Java正则表达式,匹配除文本字符串以外的任何内容';无';或';无';,java,regex,null,Java,Regex,Null,好的,伙计们。这里有一个Java面试类型的问题,似乎已经难住了这里一些非常聪明的人。他们实际上需要这个来制作代码,所以这不仅仅是一个面试难题 它们需要一个Java正则表达式,如果字符串文本不是3个字母的NIL,则该正则表达式将返回true。测试需要不区分大小写,并且正则表达式本身必须完成所有工作 因此,正则表达式应该拒绝NIL、NIL、NIL、NIL、等等 但是,它应该接受:nile、anil、will、zappa-nil-a和空字符串 编写一个简单的正则表达式需要多少Java开发人员?显然很多
^(?!nil$).*
如果不需要在匹配中实际返回字符串,则可以在结尾处省略*
。以下是一个不区分大小写选项的版本:
^(?![nN][iI][lL]$).*
说明:
^ # start of string anchor
(?! # start negative lookahead (fail if...)
nil # literal characters 'nil'
$ # end of string
) # end lookahead
.* # consume string (not necessary, but it acts more like a typical regex)
如果希望正则表达式与
nil\n
匹配,则在前瞻中使用\z
而不是$
:^(?!nil\z)。*
这是一个真正的正则表达式,一种直接指定有限自动机的自动机,该自动机可以一个接一个地输入字符串的字符,如果字符串不是NIL上的变量,则将达到接受状态:
(|.|..|[^Nn]..|.[^Ii].|..[^Ll]|....+)
这将在经典的正则表达式引擎上工作,这些引擎不实现环顾黑客,并且可以转换为速度极快的DFA
您可能必须使用^
和$
来锚定此函数,这取决于您使用哪种正则表达式函数:(整字符串)匹配语义或子字符串搜索语义
例如,grep测试:
# rejects lines like nIl and NiL but accepts all else
# including blank lines:
grep -E '^(|.|..|[^Nn]..|.[^Ii].|..[^Ll]|....+)$'
这里的想法是:
NIL和NIL被拒绝的原因是它们不符合所有三条规则2.1、2.2和2.3。NIL确实以N开头,因此它失败于2.1。它在中间有一个I,所以它失败了2.2,它在末尾有一个L,所以它失败了2.3。根据这个燃烧问题的一个先导开发者,在第一个例子^(.n.$)*中的代码将被修改为:“^(i))(?!)*前面需要额外的位,因为我们无法控制编译器选项,所以正则表达式必须自己完成这项工作。接受这一点作为答案。请注意,我们在正则表达式前面添加了(?i),就在“^@ArmchairBronco
之后。请注意,我们添加了(?i)
是的,这就是Andrew这么说的原因。在Java中有两种方法可以做到这一点:(?i)
和模式。不区分大小写
您可以将其放在“潜在开发人员”中“烟斗,让他抽一会儿,哈哈。”谢谢你的反馈,卡兹。不知道他是否吸烟,但我会确保他吸一口这种新烟草。我很欣赏这种替代方法和解释。对于斜体字部分,加1,扶手椅野马兄弟。