我正在使用JSP和Servlet,用户将在JSP页面中输入该表单中的一些字符串。
那个字符串可以是这样的 -
/pp/dc/dc1/h1
...
/pp/dc/dc1/h100
or
/pp/dc/dc2/h1
...
/pp/dc/dc2/h100
or
/pp/dc/dc3/h1
...
/pp/dc/dc3/h100
此处pp
和dc
根本不会改变。有时,他们可以通过dc1
或dc2
或dc3
,他们将始终传递一个以h
开头的字符串,然后是h1
之类的字符串}或h2
或h100
。
所以这意味着有时字符串可以像这样 -
/pp/dc/dc1/h10
or
/pp/dc/dc3/h3
or
/pp/dc/dc2/h10
所以我的问题是如何使用正则表达式检查这些模式。如果h10
之后有任何字符串,或者h
之后有任何数字,那么这就是
/pp/dc/dc2/h10/pro
然后我将返回false,否则返回true,如果它与上面显示的模式相同。
使用RegularExpressions可以做到吗?
String data = "/pp/dc/dc3/h1"
答案 0 :(得分:1)
答案 1 :(得分:1)
你可以通过这个正则表达式实现这一点:
^\/pp\/dc\/dc[123]\/h([1-9]{1,2}|100)$
您可以在http://www.regexper.com/#%5E%5C%2Fpp%5C%2Fdc%5C%2Fdc%5B123%5D%5C%2Fh(%5B1-9%5D%7B1%2C2%7D%7C100)%24
中验证这是否是您想要的编辑:我在regex101中添加了一个示例http://regex101.com/r/eI2yO9 请注意,此正则表达式不允许您指定的最后一个数字大于100。另请注意,在此示例中/不会转义,但我认为您必须根据语言使用它们。
编辑:如果您想在评论中匹配字符串,可以使用
实现^\/pp\/dc\/dc[psl]\/h([1-9]{1,2}|100)$
您可以在http://regex101.com/r/iW1vL3或http://www.regexper.com/#%5E%5C%2Fpp%5C%2Fdc%5C%2Fdc%5Bpsl%5D%5C%2Fh(%5B1-9%5D%7B1%2C2%7D%7C100)%24
中看到答案 2 :(得分:0)
如果正则表达式不是严格的要求,我想你可以根据string.split(" /")方法做一些事情。然后,您可以在一个简单的循环中根据您的要求适当地检查每个令牌。
答案 3 :(得分:0)
用正则表达式“计算”并不容易,但它是可行的:
^ (?# match start of string)
/pp (?# match /pp literally)
/dc (?# match /dc literally)
/dc (?# match /dc literally)
[1-3] (?# match a number 1-3)
/h (?# match /h literally)
(?: (?# start non-capturing group)
[1-9] (?# match a number 1-9)
| (?# OR)
[1-9] (?# match a number 1-9)
[0-9] (?# match a number 0-9)
| (?# OR)
100 (?# match 100 literally)
) (?# end non-capturing group)
$ (?# match end of string)
这将匹配/h1
- /h3
和/d1
- /d100
。