是否有可能编写正则表达式,其中的评估总会失败?

时间:2010-02-20 17:09:38

标签: java regex

  

可能重复:
  What regular expression can never match?

我想编写正则表达式,它将与空语言相对应。空语言是常规的,因此应该有一种方法为它编写正则表达式。

我特别感兴趣的是如何使用java.util.regex包提供的API在Java中编写它(如果可能的话),但任何其他语言/ API都可以。如果有可能的话,我很好奇。

再次澄清一下,我想找到正则表达式EMPTY_LANG_REGEX,以便

Pattern.compile(EMPTY_LANG_REGEX).matcher(s).matches()

将为每个字符串 s 生成 false

我知道类似于++的东西,但这有点破解并且存在性能问题。

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

根本不匹配任何字符串,甚至不是空字符串:

^(?=a)b$

另一种不使用前瞻的替代方法(在多线模式下不起作用):

a^

另一种方法,使用对每个字符都失败的否定字符类:

^[^\S\s]$

对于支持单词边界匹配的正则表达式实现,这将始终失败,因为'aa'中的字符之间不会有单词边界:

^a\ba$

或更简单,并且在大多数正则表达式实现中可能也无法匹配:

^\b$