0

我是正则表达式的新手,我试图在 gwt 客户端使用 RegExp。我想做一个简单的 * 匹配。(假设用户输入 006* ,我想匹配 006...)。我很难写这个。我所拥有的是:

input = (006*)
input = input.replaceAll("\\*", "(" + "\\" + "\\" + "S\\*" + ")"); 
RegExp regExp = RegExp.compile(input).

它也使用 BKLFD006* 之类的字符串返回 true。我究竟做错了什么 ?

4

2 回答 2

2

将 a^放在您正在生成的正则表达式的开头。

^字符表示仅匹配源字符串的开头。

于 2013-09-27T08:26:01.063 回答
1

我认为您在这里混合了两件事,即替换和匹配。

当您想要提取与特定模式匹配的输入字符串的一部分时,使用匹配。在您的情况下,这似乎是您想要的,并且为了获得一个或多个数字后跟一个星号而不是任何前面的数字,您可以使用以下正则表达式:

^[0-9]+(?=\*)

这是一个Java片段:

String subjectString = "006*";
String ResultString = null;
Pattern regex = Pattern.compile("^[0-9]+(?=\\*)");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
    ResultString = regexMatcher.group();
}

另一方面,当您想用其他东西替换输入字符串中重复出现的模式时,使用替换。

例如,如果您想用括号括起来的相同数字替换所有后跟星号的数字,那么您可以这样做:

String input = "006*";
String result = input.replaceAll("^([0-9]+)\\*", "($1)");

请注意使用来引用使用正则表达式模式中$1的捕获组捕获的数字。([0-9]+)

于 2013-09-27T08:30:43.407 回答