Java Regex:针对特定模式评估字符串

时间:2013-09-04 08:46:09

标签: java regex

我有一个特定模式的字符串,如下所示我需要验证:

String a ="test/<value>"
String b = "test/test1/<value>"
String c = "test3";
String d = "test4"

其中 - 可以是任何东西,即字母,数字,符号,拼写字符。

字符串c和字符串d非常简单。问题来自字符串a,b。

有效字符串:

test/12 | test/abc | test/12.39 ...
test/test1/12 | test/test1/abc | test/test1/12.30
test3
test4

无效字符串:

test1/12
test/test123/12

test,test1,test3,test4是关键词。任何改变都应该归咎于我。

我尝试使用以下正则表达式模式:

Pattern  pattern1 = "^(test/(test1/)?[A-Za-z0-9]+|test3|test4)?/?$"

它适用于少数场景,即

test/123 (pass)
test/test1/abc123(pass)

当它有任何符号,十进制值或spl符号时失败:

test/10.12 (Fail)
test/test1/@#$$ (Fail)

Pattern pattern2 = "^(test/(test1/)?[A-Za-z0-9/*!@#$%^&*()\"{}_|\\?/<>,.]+|test3|test4)?/?$";

当我使用上述模式时,如果关键字有任何变化,则失败。

test/test1344/123(Fail)

即使我更改关键字,它返回true。预期结果为false。

请告知我如何验证上述字符串?

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

^(?:test/(?:test1/)?[^/]+|test3|test4)/?$

我刚刚将[A-Za-z0-9]替换为[^/](任何非正斜杠字符)

答案 1 :(得分:0)

尝试^(test3|test4|test(/test1)?/([0-9.]+|[A-Za-z]+))$/