正規表現
正規表現は基本的に文字列操作の文法規則であり、これを使用すると、文字列の照合、分割、置換操作をより柔軟に実装できます。
通常のマーク
正規表現でサポートされているすべてのクラスは、java.util.regexパッケージで定義されています。このパッケージでは、次の2つのメインクラスが定義されています
。1.パターンクラス:使用する式オブジェクトを主に定義します
。2.マッチャークラス:通常のタグと指定したコンテンツのマッチング操作を実行するために使用します。
使用できるすべての通常のタグは、java.util.regex.Patternクラスの説明ドキュメントで定義されています。よく使用されるタグは次のとおりです。
1. 1文字(数字:1)
- 文字:1つの文字で構成されることを示します。
- \\\:エスケープ文字「\」を示します。
- \ t:「\ t」記号を表します。
- \ n:「\ n」記号を表します。
2.文字セット(数量:1)
- [abc]:文字a、文字b、文字cのいずれかであることを示します。
- [^ abc]:文字a、b、cのいずれでもありません。
- [az]:すべて小文字。
- [a-zA-Z]:大文字と小文字を区別しない任意の1文字を表します。
- [0-9]:任意の数字を表します。
3.簡略化された文字セット式(数量:1)
- 。:任意の文字を表します。
- \ d: "[0-9]"と同等。これは簡略化された書き込みに属します。
- \ D:「[^ 0-9]」と同等。これは簡略化された書き込みに属します。
- \ s:空白文字を表します。例: "\ t"、 "\ n";
- \ S:空白以外の文字を表します。
- \ w:「[a-zA-Z_0-9]」と同等。これは、任意の文字、数字、_で構成されることを意味します。
- \ W:「[a-zA-Z_0-9]」と同等で、任意の文字、数字、_で構成されていないことを示します。
4.境界割り当て
- ^:定期的に開始。
- $:通常の終了。
5.数量式
- レギュラー?:このレギュラーが0または1回出現する可能性があることを示します。
- 正規+:この正規は1回または複数回出現できることを示します。
- 通常*:この通常は0回、1回、または複数回出現できることを示します。
- レギュラー{n}:このレギュラーが正確にn回出現することを示します。
- レギュラー{n、}:このレギュラーがn回以上(n回を含む)出現することを示します。
- レギュラー{n、m}:このレギュラーがn〜m回出現することを示します。
6.論理演算
- レギュラー1レギュラー2:レギュラー1は、判定が完了した後もレギュラー2を判定し続けます。
- レギュラー1 |レギュラー2:レギュラー1またはレギュラー2を満たすことができます。
- (レギュラー):複数のレギュラーをグループとして扱い、このグループの発生数を個別に設定できます。
パターンの一般的な方法
番号。 | メソッド名 | タイプ | 説明文 |
---|---|---|---|
1 | public static Pattern compile(String regex) | 普通の | 正規表現をコンパイルする |
2 | public String [] split(CharSequence input) | 普通の | 完全なデータ分割操作 |
3 | public String [] split(CharSequence input、int limit) | 普通の | データ分割操作 |
4 | public Matcher matcher(CharSequence入力) | 普通の | Matcherクラスオブジェクトを取得する |
注:Patternクラスは構築メソッドを定義しないため、Patternクラスオブジェクトを取得する場合は、compile()メソッドを使用して正規表現をコンパイルする必要があります。同時に、Patternクラスで定義されたメソッドはパラメーターを受け取るときにCharSequenceインターフェースオブジェクトを受け取るため、CharSequenceインターフェースのサブクラスは通常の操作を実行できます。
例:パターンクラスを使用して文字列分割を実現する
package Project.Study.PatternClass;
import java.util.Arrays;
import java.util.regex.Pattern;
public class Test1 {
public static void main(String[]args){
String str="hello3232world32!!!";
String regex="\\d+";
Pattern pattern=Pattern.compile(regex); //编译正则
String[] result =pattern.split(str); //拆分字符串
System.out.println(Arrays.toString(result));
}
}
//结果:
//[hello, world, !!!]
Matcherクラスの一般的なメソッド
番号。 | メソッド名 | タイプ | 説明文 |
---|---|---|---|
1 | パブリックブールmatches() | 普通の | レギュラーマッチ |
2 | public String replaceAll(String replacement) | 普通の | すべてを交換 |
3 | public String replaceFirst(String replacement) | 普通の | 最初の |
例:文字列検証操作を実装する
package Project.Study.MatcherClass;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test1 {
public static void main(String[]args){
String str="100";
String regex="\\d+";
Pattern pattern=Pattern.compile(regex); //编译正则
Matcher matcher=pattern.matcher(str); //进行正则匹配
System.out.println(matcher.matches()); //匹配结果
}
}
//结果:
//true
通常の文字列クラスのサポート
実際、実際の開発では、Stringクラスがより多く使用されます。ほとんどの場合、Stringクラスで提供されるメソッドは、通常の操作を直接単純化するために使用されます。まれに、パターンクラスとマッチャークラスを使用して、規則性を操作します。
Stringクラスの規則性に関連する5つの操作メソッド
番号。 | メソッド名 | タイプ | 説明文 |
---|---|---|---|
1 | パブリックブールマッチ(文字列正規表現) | 普通の | 定期的な検証、指定された文字列を使用して、指定された正規表現構造を満たすかどうかを判断します |
2 | パブリック文字列replaceAll(文字列正規表現、文字列置換) | 普通の | 通常のマークを満たすすべてのコンテンツを新しいコンテンツに置き換えます |
3 | パブリック文字列replaceFirst(文字列正規表現、文字列置換) | 普通の | 通常のマークを満たす最初のコンテンツを新しいコンテンツに置き換えます |
4 | public String [] split(String regex) | 普通の | 指定された通常のマークに従って完全な文字列分割を実行します |
5 | public String [] split(String regex、int limit) | 普通の | 指定された通常のマークに従って文字列を部分的に分割します |
上記の5つの方法には、文字列の置換、分割、検証操作が含まれます。
例:文字列置換を実装する
package Project.Study.Regex;
public class Test1 {
public static void main(String[]args){
String str="hel12l32o232121wQo@#rl32d!!!";//给出一组混乱的字符串
String regex="[^a-z]"; //编写正则,剔除所有不是小写字母的字符
System.out.println(str.replaceAll(regex,""));//字符串替换
}
}
//结果:
//helloworld
例:文字列分割
package Project.Study.Regex;
public class Test2 {
public static void main(String[]args){
String str="hello090world3241!!!";
String regex="\\d+"; //表示"[0-9]"一位以上的整数位,属于简化写法,因为是在字符串中定义的,所以用"\\"代替"\",属于转义字符操作
String[] result =str.split(regex);
for (String s : result) {
System.out.println(s); //输出分隔好的字符串
}
}
}
//结果:
//hello
//world
//!!!
定期検証申請
文字列が小数点付きの数値 "。"(小数点。 ""は通常の文字を意味します)である場合、それを浮動小数点データに変換するにはどうすればよいですか?
例:文字数を浮動小数点データに変換する
package Project.Study.Regex;
public class Test3 {
public static void main(String[]args){
String str1="10.01";
String str2="10.10";
String regex="\\d+(\\.\\d+)?";
if(str1.matches(regex)){ //转型前要进行验证
System.out.println(Double.parseDouble(str1));
}
if(str2.matches(regex)){ //转型前要进行验证
System.out.println(Double.parseDouble(str2));
}
}
}
//结果:
//10.01
//10.1
上記のプログラムでの定期的な分析:「?」上記のプログラムでは、小数点以下が0回または1回出現する可能性があることを示しています。
上記のプログラムでは、matches()メソッドを使用して定期的な検証を行っています。同様に、このメソッドを使用して、次のような他のものを判断することもできます。
例:
package Project.Study.Regex;
public class Test4 {
public static void main(String[]args){
String str1="192.168.1.1";
String str2="192.1683.1.1";
String regex1="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";//该正则中的"\\d{1,3}"表示1~3位数字
String regex2="(\\d{1,3}\\.){3}\\d{1,3}"; //简化正则操作
System.out.println(str1.matches(regex1));
System.out.println(str1.matches(regex2));
System.out.println(str2.matches(regex1));
System.out.println(str2.matches(regex2));
}
}
//结果:
//true
//true
//false
//false
例:日付形式が正しいかどうかを判別する
package Project.Study.Regex;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test5 {
public static void main(String[]args) throws ParseException {
String str="2013-8-15";
String regex="\\d{4}-\\d{1,2}-\\d{1,2}"; //定义验证正则
if(str.matches(regex)){ //符合规则
Date date=new SimpleDateFormat("yyyy-MM-dd").parse(str);
System.out.println(date);
}
}
}
//结果:
//Thu Aug 15 00:00:00 CST 2013