Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式匹配字符串?_Java_Regex_String - Fatal编程技术网

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

Java 使用正则表达式匹配字符串?,java,regex,string,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 这里的pp和dc根本不会改变。有时,它们可以传递dc1或dc2或dc3,它们总是传递这样一个字符串,该字符串以h开头,然后后跟一些数字,如h1或h2或h100 这意味着有时

我正在使用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
/pp/dc/dc2/h10/pro
所以我的问题是如何使用正则表达式检查这些类型的模式。如果在
h10
之后有任何字符串,或者后面跟有
h
的任何数字,如下所示-

/pp/dc/dc1/h10

or

/pp/dc/dc3/h3

or

/pp/dc/dc2/h10
/pp/dc/dc2/h10/pro
然后我将返回false,否则返回true,如果它与上面显示的模式相同

使用正则表达式可以做到这一点吗

String data = "/pp/dc/dc3/h1"
这个怎么样:

^/pp/dc/dc[123]/h[0-9]+$
工作正则表达式示例:


如果正则表达式不是一个严格的要求,我想您可以基于string.split(“/”)方法来做一些事情。然后,您可以根据自己的要求在一个简单的循环中适当地检查每个令牌。

使用正则表达式“计数”并不容易,但它是可行的:

^       (?# 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

使用此正则表达式可以实现:

^\/pp\/dc\/dc[123]\/h([1-9]{1,2}|100)$
你可以验证这是否是你想要的

编辑:我在regex101中添加了一个示例 请注意,此正则表达式不允许最后一个数字大于您指定的100。还要注意,在本例中,/没有转义,但我认为您必须根据语言使用它们

编辑:如果您想匹配您在评论中所说的字符串,可以使用

^\/pp\/dc\/dc[psl]\/h([1-9]{1,2}|100)$

您可以在或中看到这是可能的。你试过了吗?如果没有,你可以在www.regex101.com上玩。这很有帮助,而且你似乎很清楚自己想要什么,只是不知道怎么做。谢谢梅利奥特的帮助。在我的例子中,
dc1
dc2
dc3
是三个不同的字符串,它们不是后跟整数的dc。这只是一个例子,但我想其中有一些混乱。在我的例子中,
dcp
作为一个字符串而不是
dc1
dcs
作为第二个字符串而不是
dc2
dcl
作为第三个字符串而不是
dc3
。那么,有没有办法在正则表达式中包含这三个字符串呢?@user2809564,是的,当然,但首先,它总是
p
s
,还是
l
?还是随便一封信?或者可能是任何字母数字字符?我在阅读了一些教程后就可以使用了。谢谢你的帮助。@user2809564-太好了!!:)谢谢你的帮助。在我的例子中,
dc1
dc2
dc3
是三个不同的字符串,它们不是后跟整数的dc。这只是一个例子,但我想其中有一些混乱。在我的例子中,
dcp
作为一个字符串而不是
dc1
dcs
作为第二个字符串而不是
dc2
dcl
作为第三个字符串而不是
dc3
。那么有没有办法在正则表达式中包含这三个字符串?@user2809564我已经编辑了我的答案,以满足您的需要。