2011-12-15 38 views
-2

正規表現を使用して文字列の一部をある単語から別の単語に削除するにはどうすればよいですか?例えば正規表現を使用して文字列から別の単語に単語を削除する方法

、私は終了</body>タグに開始<body>タグから一部を除去しなければならない、との間の値は動的に決定される上記文字列で

String s = "<html><body> this is test </body></html>" 

ような文字列を有しています、出力はs="<html></html>"である必要があります。

+1

あなたの文字列には何も書いてありませんか?彼らはそこにいるはずですか、それとも '<'文字をエスケープするための努力ですか?あなたの質問を編集し、これを見てください:http://stackoverflow.com/editing-helpあなたの質問を正しくフォーマットする方法を見てください。 –

+0

質問を改善してください。あなたが何を言いたいのか分かりません... –

+0

@Bart私はこれらの要素を削除しました。元の "純粋な" HTMLタグ(したがって、Markdownのように解析されたもの)として書かれた所望の出力によって判断すると、私はOPが最初にその投稿全体を書いたと仮定し、タグを止めるために任意の文字を挿入しようとしていた解析される。改訂されたバージョンは、 ''の出力にも一貫しています。 –

答えて

2

私はここで何かが欠けていない限り、あなたが使用することができます。もちろん

s = s.replaceFirst("<body>.+</body>", ""); 

、あなたの例で、あなただけのようにも高価な正規表現を避けるために

s = s.substring(0, 6) + s.substring(s.length() - 7, s.length()); 

を使用する場合があります。

+0

FWIW、私は貪欲でない正規表現、つまり 's = s.replaceFirst(" 。+? "、" ");'もし、彼が置きたいと思っているものが単一のオカレンスではないならば、 – riffraff

+1

@riffraff:私は一般的なケースに同意するだろうが、この馬鹿げたシナリオに対しては貪欲1組の 'body'タグだけがあるべきであるからです。 – flesk

0

HTMLを編集した後、またはより良いXHTMLやXMLでDOMを使用している場合。正規表現でそれをしようとするのはあまり良い考えではありません。

あなたは/正規表現を使用したい場合:あなたはTHEREHEREから削除したい場合は

を、あなたはこれらのHERE A HERE B THERE C THEREのような例を考えていますか?シンプルで貪欲でないマッチは、ここで内部を取り除くと "期待通り"に動作しませんが、C THEREになります。

は基本的にあなたがしなければならない何トリックを行うとHERE A C THEREを残す必要があるTHEREを検索し、最初のHEREのでs/(.*)HERE.*?THERE/\1/(PCREの構文を使用して)を見つけるために左に行くことです。それを取り除くためにも繰り返します。ただし、これはすべての置換を置換するグローバル置換では機能しません。このような用途のためには、アルゴ:

while (found) { 
    find a first `THERE` and then go to left to find first `HERE` \ 
    with regexps or without. 
} 
関連する問題