0

我有一个类似这样的目标字符串 PT_content:data1 AND PT_content2:data2 OR PT_content3:data3

现在我需要检查字符串中是否有任何无效的限定符。例如

PT_content:data1 AND PR_content2:data2 OR PT_content3:data3(这是无效的,因为只允许PT_xxxxxx:data。)

我尝试了一些带有负前瞻的模式,但它似乎不起作用

Pattern.compile("(?!.*PT_[a-zA-Z]*:)")

谢谢

4

4 回答 4

2

尝试这个:

^(?:PT_[a-zA-Z]*:[^ ]+ (?:AND|OR|$))+$
于 2013-05-13T13:54:42.107 回答
1
^(PT_[a-z]*:data($| AND | OR ))+$

给定模式匹配多个PT_xxxxxx:data后跟AND,OR或字符串结尾。在此模式中,xxxxxx可以是任何''字符,只要它仅包含 alpha 字符即可。

这就是你要找的东西吗?我错过了什么吗?

编辑

只允许使用 alpha 作为分隔符。这也涵盖了ANDOR因为它允许大写字母。

^(PT_[a-z]*:data($| [a-zA-Z]* ))+$
于 2013-05-13T13:53:18.467 回答
0

为什么不只是创建“正”模式并尝试使用此模式匹配字符串?如果字符串匹配,这就是你的情况。

于 2013-05-13T13:52:21.487 回答
0

不确定您是否真的需要前瞻或后视。

如果你的问题是“PR_”而不是“PT_”,试试这个:

String content = "PT_content:data1 AND PR_content2:data2 OR PT_content3:data3";
Pattern badSyntax = Pattern.compile("P[^T]_.*?:.*?\\s");
Matcher matcher = badSyntax.matcher(content);
while (matcher.find()) System.out.println(matcher.group());

输出:

PR_content2:data2
于 2013-05-13T13:56:06.043 回答