Java 用于模式匹配的正则表达式
有谁能帮我修复正则表达式,以查找两个@符号之间的子字符串 示例-fghgkghfk@hello@ggjgkglgll@hello@ghfufjkfk 现在我想检索这两个HELLO子字符串。 提前谢谢。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
这有助于我在检索数据时进行模式匹配。这将匹配@个字符之间的文本:
(?<=@).*?(?=@)
下面是一些测试代码:
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 @