2

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

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

其中value - 可以是任何东西,即字母、数字、符号、spl 字符。

字符串 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。

请就我如何验证上述字符串提供建议?

4

2 回答 2

1

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

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

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

于 2013-09-04T08:56:22.663 回答
0

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

于 2013-09-04T08:58:30.717 回答