2012-04-28 21 views
1

文の中の単語を置き換える方法が必要です。たとえば、 "hi、something"です。私はそれを"hello, something"に置き換える必要があります。 str.replaceAll("hi", "hello")は私に"hello, somethellong"を与えます。英数字以外の文字で囲まれた文字列を置き換えるJava正規表現

私はまたstr.replaceAll(".*\\W.*" + "hi" + ".*\\W.*", "hello")を試しましたが、私はここで別の解決策を見ましたが、どちらもうまくいかないようです。

他の英数字で囲まれていない単語を置き換えるために、これを達成する最も良い方法は何ですか?単語の境界について

答えて

4

この場合、ワード境界があなたにうまく役立つはずです(IMOが優れた解決策です)。より一般的な方法は、否定先読みと後読みを使用することです:

String input = "ab, abc, cab"; 
String output = input.replaceAll("(?<!\\w)ab(?!\\w)", "xx"); 
System.out.println(output); //xx, abc, cab 

これは、別の単語文字が前か従わない出現「AB」を検索します。 "¥w"をの任意の正規表現に置き換えることができます(正規表現エンジンは無限のルックアライメントを許さないため、実用的な制限があります)。

+0

非常に素晴らしい! 1 +私はあなたがリンクしているチュートリアルのサイトに精通していることを賭けています。 –

+0

@Hovercraft:それは別のタブで今開いています:P。しかし、私は常にlookahead/lookbehindの構文を忘れるからです。 –

2

使用\\bは:

String regex = "\\bhi\\b"; 

例えば、あなたが正規表現の任意の量をやっているつもりなら

String text = "hi, something"; 
    String regex = "\\bhi\\b"; 
    String newString = text.replaceAll(regex, "hello"); 

    System.out.println(newString); 

、このRegular Expressions Tutorialあなたの新しい親友を作ります。私はあまりにもそれをお勧めすることはできません!

+0

私はこれを私のIDEに入れました。それはうまくいきませんでした。 –

+0

@ブルース:どのように動作しませんでしたか?より多くの情報を提供できますか? –

+0

コードを正確に切り取って貼り付けます。これは出力 "hi、something" –

関連する問題