正規表現の利用について。
文法についてはほぼ共通しているため基本的にここでは触れない。
Java
パターン定義
- 1) Pattern クラスのクラスメソッドでパターンを定義する。
Pattern p = Pattern.compile("([A-Z])[a-z]+");
- 2) Matcher クラスを生成して逐一評価する。
Matcher m = p.matcher("This is English.");
- 3) Matcher#find() メソッドで次候補を引き出す。返り値が true のときは group(int) メソッドで取り出せる。
while (m.find()) {
String word = m.group(0); //直前の find() で見つかった、パターンに合致する部分すべて。最初は "This"
char l = m.group(1).charAt(0); //パターンに合致する部分のうち、1つめの() でくるまれた部分。最初は 'T'
}
不安なので練習がてら動作検証してみてください。
動作検証
Pattern p = Pattern.compile("([A-Z])[a-z]+");
Matcher m = p.matcher(str);
while(m.find()){
String word = m.group(0);
char L = m.group(1).charAt(0);
System.out.println("word:"+word);
System.out.println("char L:"+L);
}
実行結果
異常なしです。
word:This
char L:T
word:English
char L:E
それ以外の出番
- String#replaceAll()メソッドの第一引数は、単純な一致ではなく正規表現を用いて評価される。
PHP
同様に、パターンを組んで順繰り評価する方法と、それ以外の出番を分けて書いてください。
独特の記法があり、かなり困難だと思われますが頑張ってください。
- preg_match()関数をjavaのMatcher#find()メソッドの様に使用することが出来ます。
$pattern = "/([A-Z])[a-z]+/"; //正規表現の際にはデリミタ'/'で囲みます。
$str = "This is English";
$hoge = preg_match($pattern, $str ,$m);
if($hoge == 1){
print("match<br>");
print($m[0]); //This 繰り返しを組めば全文とれます
}
文字の置換にはpreg_replaceが、区切り文字の抽出にはpreg_splitがそれぞれ使えます。
javascript
同様に、パターンを組んで順繰り評価する方法と、それ以外の出番を分けて書いてください。
String#matchメソッドでマッチ判定を行います。
ver str = "This is English";
if (str.match(/([A-Z])[a-z]+/)) { //""なしで動く
document.write("match");
}
RegExp関数を使えばパターンを指定することもできます。
ver pattern = new RegExp("([A-Z])[a-z]+"); //こちらは'/'なし
if(str.match(pattern)){
document.write("match");
}
最終更新:2013年12月05日 14:26