Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Pattern Matching - Fatal编程技术网

Java 用于模式匹配的正则表达式

Java 用于模式匹配的正则表达式,java,regex,pattern-matching,Java,Regex,Pattern Matching,有谁能帮我修复正则表达式,以查找两个@符号之间的子字符串 示例-fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk 现在我想检索这两个HELLO子字符串。 提前谢谢。 这有助于我在检索数据时进行模式匹配。这将匹配@个字符之间的文本: (?<=@).*?(?=@) 下面是一些测试代码: public static void main(String[] args) { String input = "fghgkghfk@hello@ggjgkglgl

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

示例-fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk

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

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

(?<=@).*?(?=@)
下面是一些测试代码:

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]

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

说明:

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

查看它的实际操作。

修复正则表达式-您希望我们修复哪一个?请注意,如果在@之间获取内容,您也将获得ggjgkglgll。您必须将其过滤掉。对于简单分隔字符串,您可以使用split@并使用1和3索引。为什么要使用look back和look ahead?这里并不真的需要它们。@RohitJain我认为它们是需要的-他不想在文本上匹配,不包括@Bohemian。。这也会起作用:-@.*?@,只需得到第1组。@RohitJain的观点很好,但从技术上讲,正则表达式不匹配。。。该正则表达式的第1组匹配。劈头盖脸?也许吧,但有时您希望将整个匹配输入到其他内容中,而不必对其调用组逻辑。顺便说一句,在我的附录中,我使用了正则表达式减去分组,但不是为了匹配目标,而是为了匹配调用的目标之间的内容split@sai没问题。如果您认为这回答了您的问题,请在左侧空白的勾号处打勾接受。。这符合我的要求,不客气。请投票并接受答案,如果你不介意的话,我很抱歉。。。我正在尝试投票,但我没有足够的投票声誉。。。。当然,当我获得所需的声誉时,我会投票。谢谢:
    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 + ">");
    }
'@(.*?)@' 
@      # Match starts at literal @
(.*?)  # Capture everything inbetween (non-greedy)
@      # Match ends at literal @