連載
» 2003年09月09日 00時00分 公開

基礎から学ぶサーブレット/JSP(8):クラスライブラリを攻略「ユーティリティ編」 (4/5)

[山田祥寛,@IT]

文字列中のURLに自動的にリンクを設置する―Pattern/Matcherクラス(2)―

 正規表現は、任意の文字列パターンを検出するだけのものではありません。例えば、本項の例のように、文字列中からURL文字列を抽出し、リンク文字列に置き換える手法などは、掲示板アプリケーションなどではいわば定石ともいうべきテクニックです。

 そのほか、メールアドレスに対しても同様の効果が適用できるでしょうし、また、文字列中からHTMLタグを取り除く場合にも応用可能です。

リスト6 urlLink.jsp
<%@ page contentType="text/html;charset=Shift_JIS" import=
"java.util.regex.*" %>
<%!
private String urlLink(String strVar){
  Pattern objPtn=Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+",Pattern.CASE_INSENSITIVE);
  Matcher objMch=objPtn.matcher(strVar);
  return objMch.replaceAll("<a href='$0'>$0</a>");
}
%>
<%=this.urlLink("新WINGSサイト http://www.wings.msn.to/ をよろしく!")%>

URL部分に動的にリンクを設置します URL部分に動的にリンクを設置します

ロジックの概要

 Pattern#matcherメソッドを使って正規表現検索を行うまでは、先ほどの例と同様です。しかし、前項ではMatcher#groupメソッドを介してマッチング文字列を抽出したのに対し、今回はreplaceAllメソッドで置き換え処理を行います。

 replaceAllメソッドは引数として単純に固定文字列を指定できるだけでなく、$0、$1、・・・のようなマッチングした部分文字列への参照を含むことができるのが特徴です。

 $0にはマッチングした文字列全体が、$1、・・・$9には「()」で囲まれたサブマッチング文字列(例えば、ここでは「http://」か「https://」)が順番に格納されます。この$0...$9(マッチング参照)を利用することで、本項の例のようなマッチング文字列を基にした「加工」が容易に可能となるわけです。

 例えば、本項の例では「http://www.wings.msn.to/」が正規表現パターンにマッチングしますので、置き換えの結果、以下のような文字列が返されます。

新WINGSサイト <a href='http://www.wings.msn.to/'>http://www.wings.msn.to/</a> をよろしく!

 なお、今回はマッチングしたすべての文字列を置き換え対象としますので、replaceAllメソッドを使用しましたが、もしもマッチングした最初の1つのみを置き換え対象としたい場合にはreplaceFirstメソッドを使用します。

replaceAll(replaceFirst)メソッドを利用することで、正規表現パターンに合致した文字列を置き換えることができます。例えば、掲示板アプリケーションでHTMLタグを取り除いたり、メールアドレスやURLをタグで置き換える場合などに強力な効果を発揮します。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。