使用正则表达式匹配字符串?

时间:2014-05-15 23:38:42

标签: java regex string

我正在使用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

此处ppdc根本不会改变。有时,他们可以通过dc1dc2dc3,他们将始终传递一个以h开头的字符串,然后是h1之类的字符串}或h2h100

所以这意味着有时字符串可以像这样 -

/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"

4 个答案:

答案 0 :(得分:1)

这个怎么样:

^/pp/dc/dc[123]/h[0-9]+$

工作正则表达式示例:

http://regex101.com/r/mJ8hI7

答案 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/iW1vL3http://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)

Regex101

这将匹配/h1 - /h3/d1 - /d100