-3

谁能帮我修复正则表达式以查找两个 @ 符号之间的子字符串。

例子-fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk.

现在我想要检索这两个 HELLO 子字符串。提前致谢。这有助于我在检索数据时进行模式匹配。

4

3 回答 3

2

这将匹配字符之间的文本@

(?<=@).*?(?=@)

这些是两端的环视(非消耗匹配),并且我在两者之间使用了非贪婪匹配,因此匹配不会一直运行到下一个 @包围匹配的末尾


如果您想要一个提取所有此类短语的优雅单行,请执行以下操作:

String[] phrases = input.replaceAll("(^.*?@)|(@[^@]*$)", "").split("@.*?@");

下面是一些测试代码:

public static void main(String[] args) {
    String input = "fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk";
    String[] phrases = input.replaceAll("(^.*?@)|(@[^@]*$)", "").split("@.*?@");
    System.out.println(Arrays.toString(phrases));
}

输出:

[hello, hello]
于 2012-11-19T18:36:48.370 回答
0
    String text = "fghgkghfk@hello1@ggjgkglgll@hello2@ghfufjkfk";

    Pattern ptrn = Pattern.compile("@(\\w+)@");

    Matcher mtchr = ptrn.matcher(text);

    while(mtchr.find())
    {
        String match = mtchr.group(1);

        System.out.println("Match = <" + match + ">");
    }
于 2012-11-19T18:38:37.057 回答
0

之间字符串的简单正则表达式@

'@(.*?)@' 

解释:

@      # Match starts at literal @
(.*?)  # Capture everything inbetween (non-greedy)
@      # Match ends at literal @

在这里查看它的实际应用。

于 2012-11-19T18:39:20.043 回答