我需要能够解析这样的字符串:
kev-+kvs+-one-+gdl+-greg-+kvs+-two-+gdl+-les-+kvs+-three
-+gdl+-kev-+kvs+-one-+gdl+-greg-+kvs+-two-+gdl+-les-+kvs+-three
kev-+kvs+-one-+gdl+-greg-+kvs+-two-+gdl+-les-+kvs+-three-+gdl+-并在所有三种情况下识别这三个组:
kev-+kvs+-one
greg-+kvs+-two
les-+kvs+-three换句话说,它应该使用字符串-+gdl+-来拆分字符串。
假设序列-+gdl+-不会出现,除非作为分隔符。
我该如何为此编写正则表达式呢?
发布于 2009-12-20 04:49:43
您可以使用正则表达式来解决此问题,只需使用-+gdl+-作为拆分模式即可。需要转义的内容取决于您的正则表达式风格。
在你的评论之后编辑:你可以在匹配的情况下进行编辑,但这会增加不必要的复杂性。它还取决于语言,如PHP中的示例
preg_match_all('/(.*?)(?:-\+gdl\+-|$)/', $string, $match);但是你会得到空的匹配项。
发布于 2009-12-20 04:37:49
您不必为此编写regexp,只需使用您想要作为分隔符的字符串进行拆分,您就可以获得所需的字段。
举个例子,但我不知道你用的是什么语言
"kev-+kvs+-one-+gdl+-greg-+kvs+-two-+gdl+-les-+kvs+-three".split("-+gdl+-")发布于 2009-12-20 04:49:23
简而言之,您需要的正则表达式如下:
-\+gdl\+-下面的Java代码可以做到这一点,打印出令牌的数量和令牌本身:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String text = "kev-+kvs+-one-+gdl+-greg-+kvs+-two-+gdl+-les-+kvs+-three";
String regex = "-\\+gdl\\+-";
Pattern p = Pattern.compile(regex);
String[] tokens = p.split(text);
System.out.println("Found " + tokens.length + " tokens");
for (String token: tokens) {
System.out.println("Found " + token);
}
}
}https://stackoverflow.com/questions/1934051
复制相似问题