【问题标题】:Apply this regex in Java [closed]在 Java 中应用这个正则表达式 [关闭]
【发布时间】:2012-11-19 00:49:41
【问题描述】:

我写了这个很棒的正则表达式并且我能够实现它:

s/(?:[aeiou\u00E4\u00E4\u00F6\u00D6\u00FC\u00DC])h//ig

在 perl 中,但是我似乎迟钝地将它应用到我的 Java 代码中。我尝试了以下方法:

bar.replaceAll("?:[aeiou\u00E4\u00E4\u00F6\u00D6\u00FC\u00DC])h", "");

但我似乎缺少一些特别的东西。

因此,我的问题很明显:如何将此正则表达式应用于 Java 中的字符串?

【问题讨论】:

  • 你想如何应用它?在什么弦上?你想提取什么?
  • 你需要转义斜线吗?
  • 我有一个字符串(例如 fahst)并想在 a 之后提取 h。一般来说,我想在元音或德语变音符号(由这个正则表达式中的 unicode 字符表示)之后恰好替换一个 h。所以“fahst”应该换成“fast”,但“fahhst”应该换成“fahst”。

标签: java regex regex-negation


【解决方案1】:

不要忘记在 Java 字符串中使用双反斜杠:

bar.replaceAll("(?i)[aeiou\\u00E4\\u00E4\\u00F6\\u00D6\\u00FC\\u00DC]h", "");

开头的(?i) 替换了/i 不区分大小写的修饰符。

如果您想保留元音并只删除h,请使用lookbehind assertion

bar.replaceAll("(?i)(?<=[aeiou\\u00E4\\u00E4\\u00F6\\u00D6\\u00FC\\u00DC])h", "");

【讨论】:

  • 这是正确的,但是我似乎在我的正则表达式中犯了一个错误:/ 鉴于我之前的评论作为指示,你看到错误了吗?
  • 简单,只需将非捕获组更改为lookbehind断言即可。
  • 你能帮我解决这个问题吗?我对正则表达式很陌生
  • @user1867234:已经这样做了:)
猜你喜欢
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多