【问题标题】:Extract nth occurence in Java regex在 Java 正则表达式中提取第 n 次出现
【发布时间】:2013-03-30 20:03:06
【问题描述】:

是否可以仅使用正则表达式(无需额外代码!)来匹配第 n 个匹配项?例如,我想匹配 \002 的第二、四、六、八、十、十二等次出现,但跳过以下字符串中的第一、三、五、七等:

“汽车”\002“火车”\002“船”\002“自行车”\002“房子”\002“网球”\002“床”\002“厨房”\002“爱”\002“快乐” "

有没有人为此提供纯正则表达式解决方案?我需要这个,因为我无法更改使用正则表达式的代码,但我可以提供正则表达式。

提前致谢

【问题讨论】:

  • 关于可能性,是的,有可能,我可以想到一个很容易做到这一点的 DFA(匹配模数 n)。我会等待一些向导为此提出有趣的正则表达式:)

标签: regex


【解决方案1】:

嗯,是的,你只需将正则表达式加倍:

\002[^\002]*(\002)

要通常匹配特定字符串的每 n 次出现,您可以使用 {}

(?:\002[^\002]*){n-1}(\002)

【讨论】:

  • 从您的问题中不清楚 如何 正则表达式正在被测试。此解决方案假定它在 while(matcher.find()) 类型循环中使用。
  • 我不确定您是否需要匹配单个字符 \002 或序列反斜杠零零二。无论如何,here's 是一个使用字母 x 代替的示例。
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2013-12-06
  • 1970-01-01
  • 2013-10-23
相关资源
最近更新 更多