Java模式匹配除感叹号之外的任何字符

时间:2015-01-07 21:27:04

标签: java regex

我有一个数据流,我想只抓取那些匹配模式的字符串。我看了其他的例子,但是因为它包含了感叹号,所以我觉得有点棘手。

以下是示例数据

!P    this is a test !!

我的结束序列是!!并开始序列是!P。我想使用模式匹配器抓取上面的整个字符串。我能够使用以下模式获取此数据

Pattern.compile("!U[^!]*!!", Pattern.DOTALL);

使用

[^!]*

如果有这样的情况我会过滤:

!P this should not come !P this should come !!

但是[^!] *仅适用于单个字符,我想确保我过滤掉!P并确保我只获得以P开头的有效模式,并以!!结束!消除无效的开始和停止。

我想过滤以下情况:

!P this should come !! this should not come !!

1 个答案:

答案 0 :(得分:2)

您可以使用此否定前瞻为基础的正则表达式:

!P(?:(?!![P!]).)*!!

RegEx Demo

此处(?:(?!![P!]).)*将匹配开始和结束令牌之间的!P!!之外的所有内容。