从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容.
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher.
Pattern是一个正则表达式经编译后的表现模式。 在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特定的String那样简单,也可以很复 杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也适用于国际化的应用程序.
Pattern类的方法简述
Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与 PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
単一文字列の比較の場合、正規表現を使用するメリットはありません。正規表現の真の能力は、文字クラスと数量指定子 ( *、 、?) を含むことです。 ) より複雑なパターンの
正規表現最も単純なパターンは、指定された文字列に正確に一致します。パターンは、一致するテキストに相当します。静的な Pattern.matches メソッドは、文字列が指定されたパターンに一致するかどうかを比較するために使用されます。 🎜>
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=パターン。コンパイル(正規表現) ;