正規表現

正規表現の利用について。
文法についてはほぼ共通しているため基本的にここでは触れない。

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