パターンの中のエスケープ処理
来源:互联网 发布:2015年中国经济数据 编辑:程序博客网 时间:2024/06/13 21:47
パターンを表す文字列の中には任意の文字を記述することが出来ますが、特殊な用途で使用される文字にはエスケープ処理が必要となります。
¥ * + . ? { } ( ) [ ] ^ $ - |
これらの文字はパターンの中で使用されると特別な意味を持ちます。そこで単なる文字として扱いたい場合には「¥」記号を使ってエスケープ処理を行います。例えば次のように記述します。
¥¥¥*¥|
"¥*"と書いた場合は特殊な意味を持たない"*"という1つの文字として扱われます。
また「-」については[]の中で使用される場合にだけ特別な意味を持つため、[]の中で使用される時にエスケープ処理が必要となります。
エスケープシーケンス
パターンを表す文字列の中には次のエスケープシーケンスも記述することができます。
¥0n 8 進値 0n を持つ文字 (0 <= n <= 7)¥0nn 8 進値 0nn を持つ文字 (0 <= n <= 7)¥0mnn 8 進値 0mnn を持つ文字 (0 <= m <= 3、0 <= n <= 7)¥xhh 16 進値 0xhh を持つ文字¥uhhhh 16 進値 0xhhhh を持つ文字¥t タブ文字 ('¥u0009')¥n 改行文字 ('¥u000A')¥r キャリッジリターン文字 ('¥u000D')¥f 用紙送り文字 ('¥u000C')¥a 警告 (ベル) 文字 ('¥u0007')¥e エスケープ文字 ('¥u001B')¥cx x に対応する制御文字
他にも特別な意味を持つエスケープシーケンスが用意されていますが、必要になった時に随時解説していきます。
文字列の中に記述する場合の注意点
例えば"^"という文字に一致するパターンを作成する場合を考えてみます。"^"はパターンの中では特別な意味を持つ文字のため単なる文字として扱いたい場合は¥記号によるエスケープ処理が必要です。実際には次のように記述します。
¥^
そこで次のように記述してしまうと間違いとなります。
String regex = "¥^";Pattern p = Pattern.compile(regex);
文字列の中で¥記号は特別な意味を持ちます。その為、今度は"¥"に対して¥記号によるエスケープ処理が必要となります。実際には次のように記述します。
String regex = "¥¥^";Pattern p = Pattern.compile(regex);
最初のエスケープはパターンを表す文字列の記述ルールに従って行ったもので、次のエスケープはJava言語の文字列の中で¥記号を記述する場合のルールに従ったものです。"¥¥"と続けて記述されていてもそれぞれ意味が違う場合がありますので注意して下さい。
サンプルプログラム
では実際に試してみます。
JSample4_1.java
import java.util.regex.Pattern;import java.util.regex.Matcher;class JSample4_1{ public static void main(String args[]){ String str1 = "a"; String str2 = "."; String regex1 = "."; Pattern p1 = Pattern.compile(regex1); String regex2 = "¥¥."; Pattern p2 = Pattern.compile(regex2); check(p1, str1); check(p1, str2); check(p2, str1); check(p2, str2); } private static void check(Pattern p, String target){ Matcher m = p.matcher(target); System.out.print(target + " は " + p.pattern() + " に"); if (m.find()){ System.out.println("マッチします"); }else{ System.out.println("マッチしません"); } }}
ではコンパイルを行った上で実行してみます。
今回はまず"."で表されるパターンにマッチするかどうか調べています。パターンでは"."は任意の一文字を表す特殊な文字のため、"a"でも"."でもマッチします。それに対して"¥."は"."という単なる文字を表すパターンの為、"a"にはマッチしませんが"."にはマッチします。
- パターンの中のエスケープ処理
- apache启动选项中带参数/アパッチの起動オプションにパラメータを付与する
- エーベンブルグの風 爱本堡之风中日文完美攻略
- パターンの作成
- 加工パターンマスタの修正心得
- FORTRAN中の时间函数
- 初赛中の一些知识点
- 社説 20150308 米VSイスラエル 中東安定へ亀裂の修復を図れ
- 社説 20150412 イエメン情勢 中東の混乱拡大を憂慮する
- 2010/6/22 (一) アプリケーションのカスタマイズと検索機能
- テープル「T074」中に特殊仕訳データはどういうふうに生じたか?
- Runnableのサンプルソース
- 20161208_jarパッケージ・バージョンの判定
- 40℃中~,武汉人民の呼声
- 删除开发中不必要の资源
- androidのLinearLayout中组件右对齐
- 鸡腿の游戏_纪中1737
- Hibernate 实战中の小问题
- ip选路
- [Erlang 学习笔记]Erlang 简单实现 KMP--字符串匹配算法
- POJ 1789 Truck History (MST.Prim)
- hdu 1269 强连通
- IOS 应用视图对象的清理分析
- パターンの中のエスケープ処理
- 面向对象----类的继承
- IOS 应用事件的传递分析
- 堆和栈
- IOS 应用事件处理方法分析
- 基于Visual Studio的DLL编程实现
- volatitle用法
- MC(monitorcat) 监控军刀
- const修饰符