【问题标题】:Regular Expression for pattern matching模式匹配的正则表达式
【发布时间】:2012-11-19 18:34:51
【问题描述】:

任何人都可以帮助我修复正则表达式以查找两个 @ 符号之间的子字符串。

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

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

【问题讨论】:

  • fix the regular expression - 您希望我们修复哪一个?
  • 请注意,如果您获取@ 之间的内容,您还将获得ggjgkglgll。您必须将其过滤掉。
  • 对于简单的分隔字符串,您可以使用 split("@") 并使用 1 和 3 索引。

标签: java regex pattern-matching


【解决方案1】:

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

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

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


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

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]

【讨论】:

  • 你为什么使用look-behindlook-ahead?他们在这里并不真正需要。
  • @RohitJain 我认为他们是需要的 - 他不想匹配 between 的文本,而不是 包括 @
  • @Bohemian.. 这也可以:-@(.*?)@,只需获取组 1。
  • @RohitJain 好点,但从技术上讲,正则表达式不匹配......该正则表达式匹配的第 1 组。分头发?也许吧,但有时您希望将整个匹配项输入到其他内容中,而不必对其调用组逻辑。顺便说一句,我在附录中使用了您的正则表达式(减去分组),但不是匹配目标,而是匹配目标 between 以调用split()
  • @sai 没有问题。如果您认为这“回答了您的问题”,请“接受”它(通过勾选左侧的空心刻度线)
【解决方案2】:

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

'@(.*?)@' 

解释:

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

看到它在行动here

【讨论】:

    【解决方案3】:
        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 + ">");
        }
    

    【讨论】:

    • 谢谢泡沫..这符合我的要求
    • 不客气。如果您不介意,请投票并接受答案
    • 嘿,对不起...我正在尝试投票,但我没有足够的投票声望......当我获得所需的声望时,我肯定会投票。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2016-04-20
    • 2014-09-15
    相关资源
    最近更新 更多