【发布时间】:2013-10-28 18:34:00
【问题描述】:
我正在尝试使用正则表达式从一段文本中的特定行捕获一系列数字。在下面的简化示例中,我只是试图在“活动电话线”部分中捕获 4 位数字。我假设有未知数量的活动电话线,并且这些数字不能重复:
User Names: bob, jill, toni, tom
Active Phone Lines: 1010, 2020, 3030, 4040, 5050, 6060, 7070
Inactive Phone Lines: 1111, 2222, 3333, 4444, 5555
我知道我可以通过回车符/换行符分割字符串,并且只使用([0-9]{4}) 的正则表达式,但我很好奇,想看看我是否可以只使用一个正则表达式。
到目前为止,我能够使用以下正则表达式获得我想要的所有内容:
(?<=Active Phone Lines: |, )([0-9]{4})(?=, |\rInactive Phone Lines:)
但这将捕获“非活动电话线”中的 2222、3333 和 4444。我知道我可以使用反向引用来引用以前捕获的组,但据我所知,我只能通过捕获的顺序来引用它们,而不仅仅是以前的捕获。而且它似乎只能在同一个表达式中工作,而不是通过搜索的多次迭代。
有没有办法反向引用以前捕获的组?假设 $foo 会这样做,那么我可以使用以下正则表达式:
(?<=Active Phone Lines: |$foo, )([0-9]{4})(?=$foo, |\rInactive Phone Lines:)
【问题讨论】:
-
呃,这是java还是php?我也不太明白你想要什么。在 PHP 中,您可以使用类似
(test)(this)(?2)(?1)的东西。这将匹配testthisthistest -
这将在java中使用。目标是捕获出现在字符串“Active Phone Lines:”之后但在字符串“Inactive Phone Lines:”之前的每个 4 位数字。问题在于“Active Phone Lines:”之后会出现未知数量的 4 位数字。
标签: java regex backreference