JAVA正規表現の基本使用教程


正規表現の文法
最も簡単な正規表現は文字列であり、例えばハローワールドも正規表現であり、「ハローワールド」文字列にマッチします。この基礎の上で、私達は他の記号表現を加えて、正規表現と同じ文字列ではなく、一定のフォーマットにマッチする文字列を満たします。これらの記号は大体[]、{}、()に分けられますが、他の記号(例えば.、+、*、\\dなど)はそれらの略字形式と考えられます。
[]
[]は[]に含まれるいずれかにマッチする文字を表し、[a b c]は整合aまたはbまたはcを表す。
1つの文字区間を表すために-を使用することができ、[a-c]と[abc]は等価である。同時に複数の区間を書くことができます。区間を書いてから文字を入れることもできます。例えば、[a-z 0-9 A]はa-zまたは0-9またはAのいずれかにマッチする文字を表します。
補足集合は^を使用しても良いです。つまり、abc以外の任意の文字にマッチすることを表します。「^0-9」は、数字以外の任意の文字にマッチすることを表します。「^a」は、a以外の任意の文字にマッチすることを表します。
いくつかの等価な略記方法:
簡体字
意味
..。
「\r」以外の任意の文字にマッチします。
\d
デジタル文字とマッチします。[0-9]に相当します。
\D
数字以外の文字がマッチします。は[^0-9]に相当します。
\s
任意の空白文字にマッチします。スペース、タブ、改ページなどが含まれます。「\f\r\t\v」と等価です。
\S
任意の空白文字にマッチします。[\\f\r\t\v]と等価です。
\w
任意の種類の文字にマッチします。下線も含まれます。と[A-Za-z 0-9_]等価
\W
単語以外の文字とマッチします。「^A-Za-z 0-9_」と等価
また、javaでは******は他の言語の一つを表しているので、上記のjavaでは\d\Dなどと書く必要があります。
{}
{}は前の文字またはサブ表現にマッチする回数を表します。
表式
意味
{n}
nは非負の整数です。n回にぴったり合う。o{2}のように二回もマッチしますo
{n,}
nは非負の整数です。少なくともn回一致します。
{n,m}
mとnは負の整数ではなく、n<=mです。マッチングは少なくともn回で、せいぜいm回です。
表式
意味

前の文字またはサブ表現に0回以上マッチしています。{0}に相当します。

前の文字またはサブ表現に1回または複数のマッチをすると、{1,}に相当します。

前の文字またはサブ表現に0回または1回のマッチは、{0,1}に相当します。
()
()1つのキャプチャグループを表し、1つの表現を複数のグループに分割して、1つの文字列に必要な情報を抽出することができる()。の中の最初に加入しますか?name>グループ名を実現することができ、より便利に情報を抽出することができます。
のようですA-Za-z'+)は少なくとも1文字で構成された人名を表しています。マッチした人名を取得するには、matcher.group(「name」)だけで結果が得られます。
JAVAの書き方
テンプレート

String pattern = "[a-z]+";//     
Pattern r = Pattern.compile(pattern);//      
Matcher matcher = r.matcher(text);// text           
matcher.find();//  
value1 = matcher.group("value1");//    

説明
時間の精度によっては、以下の4つのメール情報フォーマットがあります。
username@domain-yyy-mm-dd
例:[email protected]
username@domain-yyy-mm-dd-hh
例:[email protected]
username@domain-yyy-mm-dd-hh:mimimi
例:[email protected]:01
username@domain-yyy-mm-dd-hh:mimimi:ss
例:[email protected]:01:20
そのうち
username@domainを選択します
メール送信者のメールアドレス
usernameはユーザー名で、domainはドメイン名です。
yyyy-mm-dd/yyy-mm-dd-hh/yyyy-mm-h:mimimi/yyy-mm-dd-hh:mimimimimi:ssは
送信時間
‘y’は一桁の年数を表し、‘m’は一桁の月数を表し、‘d’は一桁の日付数字を表し、‘h’は一時間の数字を表し、‘mi’は一桁の分数を表し、‘s’は一桁の秒数を表します。
usernameは、大文字小文字のみを含む、-の長さはゼロではない文字列で、大文字小文字には敏感ではない。
domainは、大文字と小文字、数字だけを含む長さがゼロではない文字列で、大文字と小文字に敏感です。
書き方

String pattern = "(?<username>[A-Za-z-]+)@(?<domain>[A-Za-z0-9.]+)-(?<yyyy>\\d{4})-(?<mm>\\d{2})-(?<dd>\\d{2})(-)?(?<hh>\\d{2})?(:)?(?<mimi>\\d{2})?(:)?(?<ss>\\d{2})?";
  String text = "[email protected]:01:20";
  Pattern r = Pattern.compile(pattern);
  Matcher matcher = r.matcher(text);
  if (matcher.find()) {
   System.out.println("username:"+matcher.group("username"));
   System.out.println("domain:"+matcher.group("domain"));
   System.out.println("yyyy:"+matcher.group("yyyy"));
   System.out.println("mm:"+matcher.group("mm"));
   System.out.println("dd:"+matcher.group("dd"));
   System.out.println("hh:"+matcher.group("hh"));
   System.out.println("mimi:"+matcher.group("mimi"));
   System.out.println("ss:"+matcher.group("ss"));
  }
textを4種類のフォーマットのメールボックスに変えても正しい結果が得られます。存在しないのはnullです。
運転結果は以下の通りです。
username:myname-lethean
doman:buaa.edu.cn
yyy:2020
mm:12
dd:20
hh:15
mimi:01
ss:20
3番目のフォーマットで入力すると、つまり、テキストが[email protected]:01の場合、以下のように出力します。
username:Lethean
doman:buaa.edu.cn
yyy:2020
mm:12
dd:02
hh:15
mimi:01
ss:null
ssはこのフォーマットにはないので、空です。
例を改める
説明
メール情報入力フォーマットを変更しました。(ss:mimi:hh-)dd-mm-yy-username@domain-プレース
時間の精度によっては、以下の4つのメール情報フォーマットがあります。
dd-mm-yyy-username@domain-プレース
例:[email protected]
hh-dd-mm-yy-username@domain-プレース
例:[email protected]
mimimi:hh-dd-mm-yy-username@domain-プレース
例:00:[email protected]
ss:mimimi:hh-dd-mm-yy-username@domain-プレース
例:01:00:[email protected]
placeは新しく加えたドメインで、場所を表して、英文の字母から構成して、大きさに対して書いて敏感で、つまりBeijingとbeijingは異なっている場所と見なします。
書き方

String pattern = "(((?<ss>\\d{2}):)?((?<mimi>\\d{2}):))?((?<hh>\\d{2})-)?(?<dd>\\d{2})-(?<mm>\\d{2})-(?<yyyy>\\d{4})-(?<username>[A-Za-z-]+)@(?<domain>[A-Za-z0-9.]+)-(?<place>[A-Za-z]+)";
String text = "01:11:[email protected]";
Pattern r = Pattern.compile(pattern);
Matcher matcher = r.matcher(text);
if (matcher.find()) {
 System.out.println("username:"+matcher.group("username"));
 System.out.println("domain:"+matcher.group("domain"));
 System.out.println("yyyy:"+matcher.group("yyyy"));
 System.out.println("mm:"+matcher.group("mm"));
 System.out.println("dd:"+matcher.group("dd"));
 System.out.println("hh:"+matcher.group("hh"));
 System.out.println("mimi:"+matcher.group("mimi"));
 System.out.println("ss:"+matcher.group("ss"));
 System.out.println("place:"+matcher.group("place"));
}
前の(ss>\d{2}:)?(?\\d{2}:)入れ子の形である必要があります。これ以外の場合はmimiをssに合わせるエラーが発生します。
運転結果は以下の通りです。
username:abc
doman:buaa.edu.cn
yyy:2020
mm:12
dd:02
hh:03
mimi:11
ss:01
place:wuhu
textを11:03-02-2020-に変更したら[email protected]、出力は以下の通りです。ssは一致しません。
username:abc
doman:buaa.edu.cn
yyy:2020
mm:12
dd:02
hh:03
mimi:11
ss:null
place:wuhu
締め括りをつける
ここでJAVA正規表現に関する記事を紹介します。JAVA正規表現の内容については、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。