Java 正则表达式在输出中缺少匹配项

Java Regex missing a match in the output

我目前正在将字符串与正则表达式进行匹配。我的模式是:

"(?<=\p{Alnum}|\p{Punct})(\p{Alnum}+\p{Punct}{1})"

我正在将它与字符串匹配:

"https://www.google.com/"

我对上述正则表达式和字符串的期望结果是:

https:, www., google., com/

除了'https:'一个之外,我能够成功获得所有匹配项。在那种情况下,它给出 'ttps:' 而不是所需的 'https:'

我不明白哪里出了问题。谁能帮我解决这个问题?

你可以使用

(?<![^\p{Alnum}\p{Punct}])(\p{Alnum}+\p{Punct})

参见online regex demo

(?<![^\p{Alnum}\p{Punct}])negativelookbehind 匹配前面没有紧接字母数字和标点字符以外的字符的位置。

请注意,您的正则表达式需要紧靠左侧的字母数字或标点字符,因此无法匹配字符串位置的开头。

请注意 {1} 始终是冗余的,您可以在 "Writing cleaner regular expressions" YT video of mine.

中查看有关正则表达式冗余的更多信息