基礎 | 掲示板 | ツール | 書籍 | デザインパターン | リンク | フィードバック

JavaでHello World > 正規表現編

メニュー

Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP編
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
2002/02/03  田中宏和
Last Update 2003/01/08
正規表現編
◆正規表現とは?
正規表現とは文字列のパターンを表現する手法です。英語ではRegular expressionといいます。
◆正規表現入門
^ 行の先頭
$ 行の末尾
. 改行以外の任意の1文字
[] []でくくられた中にある任意の1文字
[^] []でくくられた中にない任意の1文字
* 直前の文字の0個以上の並び
+ 直前の文字の1個以上の並び
? 直前の文字が0個または1個
{a} 直前の文字のa個の並び
{a,} 直前の文字のa個以上の並び
{a,b} 直前の文字のa個以上、b個以下の並び
| 2者択一の演算子

◆正規表現の使用例
■行の先頭「^」
^java 行の先頭がjavaという文字で始まっている場合
■行の末尾「$」
java$ 行の末尾がjavaという文字で終わっている場合
■改行以外の任意の1文字「.」
java.. javaの後に改行以外の任意の文字が2つ続く場合
■[]でくくられた中にある任意の1文字「[]」
[a-z] 小文字のアルファベットの中の1文字
[A-Z] 大文字のアルファベットの中の1文字
[a-zA-Z] 小文字または大文字のアルファベットの中の1文字
[0-9] 数字の中の1文字
[0-9a-z] 数字または小文字のアルファベットの中の1文字
■[]でくくられた中にない任意の1文字「[^]」
[^a-z] 小文字のアルファベット以外の1文字
[^A-Z] 大文字のアルファベット以外の1文字
[^a-zA-Z] アルファベット以外の1文字
[^0-9] 数字以外の1文字
[^0-9a-z] 数字以外、小文字のアルファベット以外の1文字
■直前の文字の0個以上の並び「*」
J* 0個以上のJの繰り返し
.* 0個以上の任意の文字の繰り返し
J.*D JとDの間に0個以上の任意の文字の繰り返し
■直前の文字の1個以上の並び「+」
J+ 1個以上のJの繰り返し
.+ 1個以上の任意の文字の繰り返し
J.+D JとDの間に1個以上の任意の文字の繰り返し
■直前の文字が0個または1個「?」
JA? JまたはJA
■直前の文字のa個の並び「{a}」
J{2} JJ
J{3} JJJ
■直前の文字のa個以上の並び「{a,}」
J{3,} JJJ,JJJJ,JJJJJ,・・・(3回以上のJの並び)
■直前の文字のa個以上、b個以下の並び「{a,b}」
J{3,5} JJJまたはJJJJまたはJJJJJ
■2者択一の演算子「|」
J|A JまたはA
Java|Hello JavaまたはHello

◆ここでの環境
OS Windows 2000
J2SE 1.4.0
◆Java実行環境の構築
アプリケーション編を参考にしてJavaの実行環境を構築してください。
◆java.util.regexパッケージ
正規表現用クラスはjava.util.regexパッケージに入っています。このパッケージの中にはPatternクラスとMatcherクラス、PatternSyntaxExceptionクラスがあります。
■Patternクラス
正規表現はコンパイルされてこのクラスのインスタンスになり、Matcherクラスの生成を行います。
■Matcherクラス
Patternクラスから生成される、正規表現のパターンマッチを行うクラスです。
■PatternSyntaxExceptionクラス
例外クラス。正規表現がコンパイルされるとき、構文が不正な場合にスローされる。

◆具体的な使い方
■パターンマッチ
ここでは「JavaでHello World」という文字列が「^Java.*」にマッチするか調べています。マッチするので最後のbはtrueになります。
Pattern pattern = Pattern.compile(“^Java.*”);
Matcher matcher = pattern.matcher(“JavaでHello World”);
boolean b= matcher.matches();
■文字列の分割
ここでは「Java Hello World Java,Hello,,World」という文字列をスペースまたはカンマで分割しています。結果は以下のようになります。
Java
Hello
World
Java
Hello
World
Pattern pattern = Pattern.compile(” [, ]+”);
String[] strs = pattern.split(“Java Hello World Java,Hello,,World”);
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
■文字列の置換(最初にマッチしたもののみ)
ここでは「正規表現でHello World,正規表現でHello World」という文字列の中の最初に出てきた「正規表現」を「Java」で置換しています。結果は以下のようになります。
JavaでHello World,正規表現でHello World
pattern = Pattern.compile(“正規表現”);
matcher = pattern.matcher(“正規表現でHello World,正規表現でHello World”);
String str = matcher.replaceFirst(“Java”);
■文字列の置換(一括)
ここでは「正規表現でHello World,正規表現でHello World」という文字列の中の「正規表現」をすべて「Java」で置換しています。結果は以下のようになります。
JavaでHello World,JavaでHello World
pattern = Pattern.compile(“正規表現”);
matcher = pattern.matcher(“正規表現でHello World,正規表現でHello World”);
String str = matcher.replaceAll(“Java”);
■文字列の置換(一つ一つ順々に)
ここでは「正規表現でHello World,正規表現でHello World」という文字列の中の「正規表現」を「Java」で置換しています。ここでは一つ一つ順々に置換しています。結果は以下のようになります。
JavaでHello World,JavaでHello World
Pattern pattern = Pattern.compile(“正規表現”);
Matcher matcher = pattern.matcher(“正規表現でHello World,正規表現でHello World “);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, “Java”);
}
matcher.appendTail(sb);
System.out.println(sb.toString());

◆サンプルコード
HelloWorldRegex.java(ここからダウンロード)
import java.util.regex.*;

public class HelloWorldRegex {
public static void main(String[] args) {
Pattern pattern;
Matcher matcher;
/* パターンマッチ */
System.out.println(“<パターンマッチ>”);
pattern = Pattern.compile(“^Java.*”);
matcher = pattern.matcher(“JavaでHello World”);
boolean b = matcher.matches();
System.out.println(b);

/* 文字列の分割 */
System.out.println(“<文字列の分割>”);
pattern = Pattern.compile(” “);
String[] strs = pattern.split(“Java Hello World”);
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}

/* 文字列の置換(最初にマッチしたもののみ) */
System.out.println(“<文字列の置換(最初にマッチしたもののみ)>”);
pattern = Pattern.compile(“正規表現”);
matcher = pattern.matcher(“正規表現でHello World,正規表現でHello World”);
System.out.println(matcher.replaceFirst(“Java”));

/* 文字列の置換(一括) */
System.out.println(“<文字列の置換(一括)>”);
pattern = Pattern.compile(“正規表現”);
matcher = pattern.matcher(“正規表現でHello World,正規表現でHello World”);
System.out.println(matcher.replaceAll(“Java”));

/* 文字列の置換(一つ一つ順々に) */
System.out.println(“<文字列の置換(一つ一つ順々に)>”);
pattern = Pattern.compile(“正規表現”);
matcher = pattern.matcher(“正規表現でHello World,正規表現でHello World”);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, “Java”);
}
matcher.appendTail(sb);
System.out.println(sb.toString());
}
}

◆コンパイルと実行
コマンドプロンプト
C:\作業フォルダ\regex>javac HelloWorldRegex.java
C:\作業フォルダ\regex>java HelloWorldRegex
<パターンマッチ>
true
<文字列の分割>
Java
Hello
World
Java
Hello
World
<文字列の置換(最初にマッチしたもののみ)>
JavaでHello World,正規表現でHello World
<文字列の置換(一括)>
JavaでHello World,JavaでHello World
<文字列の置換(一つ一つ順々に)>
JavaでHello World,JavaでHello World

C:\作業フォルダ\regex>

おおおお!表示されましたね!

■書籍
Java関連の書籍

このページのご意見、ご感想、ご提案などをお聞かせください。また、不正な点、落丁などございましたらご連絡お願いいたします。
素晴らしい  良い  普通  悪い  不十分
おなまえ