【问题标题】:.net regex into java @"(?<!\\)(?'M'[^|%])"?.net 正则表达式转换为 java @"(?<!\\)(?'M'[^|%])"?
【发布时间】:2011-03-09 13:23:09
【问题描述】:

你能帮我理解/将以下 .net 正则表达式转换为 java

@"(?<!\\)(?'M'[^|%])" ?

【问题讨论】:

  • 没有 Java 或 .NET 正则表达式之类的东西。
  • @Vash:出于所有实际目的,有。 .NET 和 Java 正则表达式的实现在某些方面有所不同。
  • @Vash:实际上,可以说有 - 考虑到每个都有自己的引擎实现。然而,最终,我同意表达式本身应该是普遍的;这并没有改变语言使用不同结构来实现单一目标的事实。
  • @Jens:有趣,你知道有什么页面描述了这个吗?
  • @Vash, regular-expressions.info/lookaround.html 在“关于 Lookbehind 的重要说明”一节中,供一个人使用

标签: c# java .net regex


【解决方案1】:

这个正则表达式由两组组成。

第一个(?&lt;!\\) 是一个lookbehind 断言。仅当前一个字母不是反斜杠时才会匹配。第二个(?'M'[^|%]) 是一个命名的捕获组(称为M),它匹配除“|”之外的任何字符和“%”。

即正则表达式将匹配“a”,而不匹配“\a”或“%”。

Java 不支持命名捕获,但是

(?<!\\)([^|%])

应该适合你。您将按编号引用第一组,而不是按名称。

请注意,对于第一部分,您可能必须转义导致 (?&lt;!\\\\) 的反斜杠。

【讨论】:

  • 我已按照您的建议将其转换为 "(?
  • 我已按照您的建议将其转换为 "(?
猜你喜欢
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多