过滤正则表达式无效

时间:2017-07-10 07:12:58

标签: java regex

我在java中遇到了文本模式的问题。我想使用此模式来验证插入的文本以过滤表格中的文本。此文本可以包含"!"(不)和" *"(如?)。我也有可能使用& (和)和|(或)将逻辑表达式与文本操作(endsWith,startsWith,contains)连接在一起。我究竟想要的是避免插入不验证文本。无效文本的示例

-
!
!*
*!
!!
**
*!
!*
A**
**A
*A&
&A*

有效文字的例子

A*
*A
*-*
!a|b&c|!ab
!a|*b&c*|!*ab
!*aa*|*sdb&casd*|!*aasdb*
!*aa|*sdb&casd*|!*aasdb*
S*|L*

使用我的模式"\s*(!?\*?[^&\|]*[&\|])*!?\*?[^&\|]*\*?\s*",两个组都有效。我试过差异组合,但没有成功。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您对自己所描述的内容的描述以及您的示例并非绝对清晰。例如,*-*有效,表示-是有效的过滤字符,那么为什么只有-无效?这不符合逻辑。

但是从我能收集的内容来看,你是在这样的事情之后:

\s*(?:!?\*?[^&|*!\n]+\*?[&|])*!?\*?[^&|*!\n]+\*?\s*

它为第一个可选部分使用非捕获组。如果存在,则以|&结尾。然后是非可选部分,它是相同的,除了没有终止运算符:

可选的!,可能后跟可选的*。然后,任何字符一个&|!或换行符 - 至少一个。最后,可以选择*

See it here at regex101

请注意,不锚定到开头和结尾(^$)意味着使用java的matches方法,这样做会为您做到这一点。使用另一种方法或其他正则表达式的味道,将需要添加这些方法,或者这将基本匹配任何内容。