正则表达帮助

时间:2011-08-02 04:57:36

标签: java regex

我已花了2个小时这个,但我仍然找不到所有的结果。字符串非常简单。就像

s:3\"content\";s:15\"another content\";

所以重复模式就像“s :(字符串的长度)\”(字符串内容)\“;” 我想要获取字符串的内容。

我试过“[s:(。*);] +”,我希望至少得到3 \“内容\”和15 \“另一个内容\”,但我得到了完全错误的结果。

有没有人知道如何从这种模式中获取字符串内容?

非常感谢...

2 个答案:

答案 0 :(得分:2)

这是Python,你需要做一些工作才能使它对Java友好:

>>> import re
>>> s='s:3\"content\";s:15\"another content\";'
>>> re.compile('s:[0-9]+\\"([^"]+)\\";').findall(s)
['content', 'another content']

对于第二个字符串,感谢Filgera建议使用非贪婪的通配符:

>>> s='s:11:\"strin1\";s:6:\"\\\"\\\"\\\"\";s:4:\"string2\";s:2:\"52\";s:4:\"string3\";s:16:\"​08\/23\/2011 00:00\";s:5:\"where\";s:9:\"\\\" \\\"\\\"\\\"\";'
>>> re.compile('s:[0-9]+:\\"(.*?)\\";').findall(s)
['strin1', '\\"\\"\\"', 'string2', '52', 'string3', '\xe2\x80\x8b08\\/23\\/2011 00:00', 'where', '\\" \\"\\"\\"']

答案 1 :(得分:0)

怎么样 s:\d+"([a-zA-Z0-9 ]*)";它将匹配以下格式s:3"My Content";并捕获内容字符串。



import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ContentExtractor {
    // For a long concatenated String
    private static String concatenatedPattern = "s:\\d+\"([a-zA-Z0-9 ]*)\";";
    private static String concatenatedString = "s:22\"This is a test string\";s:10\"Another Test\";";

    // When dealing with the tokens, usable after using the split method on the concatenated
    private static String tokensPattern = "^s:\\d+\"([a-zA-Z0-9 ]*)\"$";
    private static String[] tokens = new String[]{
            "s:3\"two\"",
            "s:10\"Token Content\""
    };

    public static void main(String args[]) {
        Matcher matcher;

        System.out.println("======= Long concatenated String======");
        matcher = Pattern.compile(concatPattern).matcher(concatenatedString);
        while( matcher.find() ) {
            System.out.println( matcher.group(1) );
        }


        System.out.println("==== single tokens ====");
        for (String token : tokens) {
            matcher = Pattern.compile(tokensPattern).matcher(token);
            if (matcher.find()) {
                System.out.println( matcher.group(1) );
            }
        }
    }
}