只有当两个序列完全相同时才匹配的正则表达式

4

能否编写一个Java正则表达式序列来匹配字符串中的两个相同序列。换句话说,给定字符串

near[2015-12-1] far[2015-12-1] 

我想匹配所有符合以下条件的字符串:第一个方括号内的值等于第二个方括号内的值,而且方括号外的字符串为near[] far[]
near[2015-12-1] far[2015-12-1] MATCH
near[2015-12-3] far[2015-12-1] NO MATCH
near[2015-12-1] far[2014-12-1] NO MATCH
near[2015-12-3] far[2015-12-3] MATCH
foo[2015-12-1] bar[2015-12-1] NO MATCH

这是否可能?
2个回答

7
使用捕获组,您应该通过反向引用引用这些捕获的字符。
"^near\\[(.*?)\\]\\sfar\\[\\1\\]$" 

DEMO


1
非常完美,谢谢。我知道应该是这样的,但一直弄不对,这次一下子就成功了。 - Tim B
锚点(^$)是不必要的,假设您使用matches() - Andreas

3
正则表达式大致如下:near\[(.*)\] far\[\1\]。在Java中,您需要编写以下内容:
Pattern.matches("near\\[(.*)\\] far\\[\\1\\]", "near[2015-12-1] far[2015-12-1]")

或者

"near[2015-12-1] far[2015-12-1]".matches("near\\[(.*)\\] far\\[\\1\\]")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接