从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容.
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher.
Pattern是一个正则表达式经编译后的表现模式。 在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特定的String那样简单,也可以很复 杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也适用于国际化的应用程序.
Pattern类的方法简述
方法 |
说明 |
static Pettern compile(String regex,int flag) |
编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE 表示不区分大小写)
|
Matcher match(CharSequence input) |
获取匹配器,input时输入的待处理的字符串
|
static boolean matches(String regex, CharSequence input) |
快速的匹配调用,直接根据输入的模式regex匹配input
|
String[] split(CharSequence input,int limit) |
分隔字符串input,limit参数可以限制分隔的次数
|
Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与 PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
Matcher类的方法简述
方法 |
说明 |
boolean matches() |
对整个输入字符串进行模式匹配.
|
boolean lookingAt() |
从输入字符串的开始处进行模式匹配 |
boolean find(int start) |
从start处开始匹配模式
|
int groupCount() |
返回匹配后的分组数目 |
String replaceAll(String replacement) |
用给定的replacement全部替代匹配的部分
|
String repalceFirst(String replacement) |
用给定的replacement替代第一次匹配的部分
|
Matcher appendReplacement(StringBuffer sb,String replacement) |
根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后
|
StringBuffer appendTail(StringBuffer sb) |
将输入序列中匹配之后的末尾字串添加到sb当前位置之后.
|
正規表現での一般的なワイルドカード:
単一文字列の比較の場合、正規表現を使用するメリットはありません。正規表現の真の能力は、文字クラスと数量指定子 ( *、 、?) を含むことです。 ) より複雑なパターンの
文字クラスには次のものが含まれます。
d 個の数字
D 個の非数字
w 個の単一単語文字 (0-9、A-Z、a-z)
W 個の非単一単語文字
空白 (スペース文字、改行、復帰、タブ)
S 空白以外
[] 角括弧
内の文字のリストから作成されたカスタム文字クラス
の下の任意の 1 文字と一致します。文字は、サブパターンを一致数に適用するプロセスを制御するために使用されます。
? 前のサブパターンを 0 回から 1 回繰り返します。
* 前のサブパターンを 0 回以上繰り返します。
前のサブパターンを繰り返します。 1 回から複数回
以下はサンプル部分です:
例 1: 正規表現最も単純なパターンは、指定された文字列に正確に一致します。パターンは、一致するテキストに相当します。静的な Pattern.matches メソッドは、文字列が指定されたパターンに一致するかどうかを比較するために使用されます。 🎜>
String data="java";
boolean result= Pattern.matches ("java",data);
例 2:
String[] dataArr = { "moon", "mon", "moon", "mono" }; : dataArr) {
String patternStr="m(o )n";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println( "String " str " 一致パターン "patternStr "success");
else{
System.out.println("string" str "match pattern" patternStr "failed");
}
パターンは「m(o )n」です。これは、mn の真ん中の o が 1 回以上繰り返される可能性があることを意味し、moon、mon、moon が一致する可能性があります。成功し、mono は n の後にもう 1 つあります。
注:
は 0 回以上を意味します。 🎜>
例 3:
コードをコピー
if (result) {
System.out.println("string" str "matchパターン" patternStr "成功");
}
else{
System.out.println("string" str "パターン一致" patternStr "失敗");
}
}
注: 角括弧内で使用できる単一文字は、パターン「b[aeiou]n」で指定され、b で始まり n で終わり、a、e、i、のいずれかで指定されるもののみです。 o、および中央の u は照合できるため、配列内の最初の 5 文字は照合できますが、最後の 2 つの要素は照合できません。
角括弧 [] は、その中で指定された文字のみが照合できることを示します。
例 4:
コードをコピーif (result) {
System.out.println("string" str "一致パターン" patternStr "成功");
}
else{
System.out.println("character String " str "一致するパターン" patternStr "失敗");
}
}
複数の文字を一致させる必要がある場合、[] は使用できません。代わりに () プラス | を使用できます。() はグループを表し、| は or 関係を表します。 ea|oo)n は、been、bean、boon などと一致します。
最初の 3 つは と一致しますが、後の 2 つは一致しません。
例 5:
コードをコピー
if (結果) {
System.out.println("string" str "一致パターン" patternStr "成功") ;
}
else{
System.out.println("string" str) "パターンの一致" patternStr "失敗");
}
}
注: 上記からわかるように、d は数値を表し、1 つ以上の時間を表すため、パターン d は 1 つ以上の数字を表します。
したがって、最初の 4 つと最後の 4 つが一致します。 1 つは数字ではないため、
[/code]
例 6:
String[] dataArr = { "a100", "b20", "c30", "df10000" ,"gh0t"};
for (String str : dataArr) {
String patternStr="w d ";
boolean result = Pattern.matches(patternStr, str);
System.out.println("string" str "一致パターン" patternStr "成功");
}
else{
System.out.println("String" str "一致パターン" patternStr "失敗");
}
}
モード w d は複数の単一単語文字で始まり複数の数字で終わる文字列を表すため、最初の 4 つは一致しますが、
例 7:
String str="給与、役職名、年齢、性別";
String[] dataArr =str.split("[,s ;]");
for (String strTmp : dataArr) {
System .out.println(strTmp);
}
String クラスの分割関数は正規表現をサポートしています上の例では、パターンは「,」、単一のスペース、「;」のいずれかと一致し、分割関数は文字列を文字列配列に分割するためにそれらのいずれかを使用できます。例 8:
Pattern p = Pattern.compile("[年月 日本]");
String[] dataArr =p.split(str); dataArr) {
System.out.println(strTmp);
}
パターンは、正規表現のコンパイルされた表現パターンであり、文字列を効果的に分割できます。
例 9:
コードをコピー
上記の例では、「(d)(yuan|renminbi|RMB)」というパターンが 2 つに分割されます。最初のグループ d は単一または複数の数値に一致し、2 番目のグループは人民元と人民元のいずれかに一致します。置換部分は、最初のグループの一致部分が変更されず、残りのグループが置き換えられることを意味します。
置き換えられる文字列は¥10 ¥1000 ¥10000 ¥100000
例 10:
コードをコピーします。 boolean result = m.find();
// ループを使用してパターン一致のコンテンツを検索します。それを置き換えてコンテンツを sb
while (result ) {
m.appendReplacement(sb, "moon");
result = m.find();
}
// 最後に、appendTail() メソッドを呼び出して、残りの文字列を追加します。 sb への最後の一致;
m.appendTail(sb);
System.out.println("置換後の内容は "
例 11:
* は 0 回以上、? は 0 回以上を示すほかに、{} を使用して X{2, の正確な出現回数を指定することもできます。 5} は、X が少なくとも 2 回、最大で 5 回出現することを意味します。5} は、🎜>
String[] dataArr = { "google", "gooogle", "gooooogle", "gooooogle", "ggle" を意味します。
for (String str : dataArr) {
String patternStr = " g(o{2,5})gle";
boolean result = Pattern.matches(patternStr, str); if (結果) {
System.out.println("string" str " パターンに一致 "patternStr "success");
} else { System.out.println("string" str "パターンに一致) " patternStr "失敗");
}
}
例 12: - ... から ... を意味します ([a-e] など) は [abcde] と同等です
String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton", " Twn"};
for (String str : dataArr) {
String regex = "T[a-c]n";
boolean result = Pattern.matches(regex, str);
if (result ) {
System .out.println("String" str "パターンの一致" 正規表現 "成功");
} else {
System.out.println("String" str "パターンの一致" 正規表現 " Failure");
}
}
例 13: 大文字と小文字を区別しないマッチング。 正規表現は、 Pattern を使用して、デフォルトで大文字と小文字を区別します。 CASE_INSENSITIVE は大文字と小文字を区別しません。
文字列パターンStr= "ab";
パターンパターン=PatternStr, Pattern.CASE_INSENSITIVE);
String[] dataArr = { "ab", "Ab", "AB"}; for (String str : dataArr) {
Matcher matcher=pattern.matcher(str);
if(matcher.find()){
System.out.println("string" str "一致パターン" patternStr "success ");
}
}
例 14: 正規表現を使用して文字列を分割します。 >
コードをコピー
String[] dataArr=pattern.split(input);
for (String str : dataArr) {
System.out.println ( str);
}
例 15: 括弧で囲まれた最初の group1 に対応するテキストを解析します。 🎜>
コードをコピーします
コードは次のとおりです。
String regex="<(w )>(w )< / >";
例 16: 単語と数字が混在する文字列の単語部分を大文字にします。
コードをコピーします。 >
コードは次のとおりです:
String regex="([a-zA-Z] [0-9] )"; パターン pattern=パターン。コンパイル(正規表現) ;