ホームページ >ウェブフロントエンド >jsチュートリアル >Java 正規表現学習の概要といくつかの簡単な例_JavaScript スキル

Java 正規表現学習の概要といくつかの簡単な例_JavaScript スキル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-05-16 17:50:041053ブラウズ

从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:




コードをコピー
コードは次のとおりです: String[] dataArr = { "ban", "ben", "bin", "bon" ,"bun","byn","baen"}; for (String str : dataArr) { String patternStr="b[aeiou]n"; boolean result = Pattern.matches(patternStr, str);
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:



コードをコピー
コードは次のとおりです: String[] dataArr = { "been", "bean", "boon", "buin" ," bynn"}; for (String str : dataArr) { String patternStr=" b(ee|ea|oo)n"; boolean result = Pattern.matches(patternStr, str);
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:



コードをコピー
コードは次のとおりです: String[] dataArr = { "1", "10", "101 ", "1010" ,"100 "}; for (String str : dataArr) { String patternStr= "d "; boolean result = Pattern.matches(patternStr, str);
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:


コードをコピー コードは次のとおりです。 String str= "2007 年 12 月 11 日";
Pattern p = Pattern.compile("[年月 日本]");
String[] dataArr =p.split(str); dataArr) {
System.out.println(strTmp);
}


パターンは、正規表現のコンパイルされた表現パターンであり、文字列を効果的に分割できます。

例 9:




コードをコピー
コードは次のとおりです: String str=" 10 元 1000 RMB 10000 元 100000RMB"; str=str.replaceAll("(d )(yuan|RMB|RMB)"; , "¥"); System.out.println(str);

上記の例では、「(d)(yuan|renminbi|RMB)」というパターンが 2 つに分割されます。最初のグループ d は単一または複数の数値に一致し、2 番目のグループは人民元と人民元のいずれかに一致します。置換部分は、最初のグループの一致部分が変更されず、残りのグループが置き換えられることを意味します。
置き換えられる文字列は¥10 ¥1000 ¥10000 ¥100000

例 10:




コードをコピーします。
コードは次のとおりです。 Pattern p = Pattern.compile("m (o )n",Pattern.CASE_INSENSITIVE) // matcher( ) Matcher オブジェクトを生成する Pattern クラスのメソッド Matcher m = p.matcher("moon mooon Mon mooooon Mooon"); StringBuffer sb = new StringBuffer(); ) 最初に一致するオブジェクトを見つけるメソッド
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 )< / >";
パターン pattern=Pattern.compile(regex); String input="請求書50000GM</ title> ;"; <a style="CURSOR: pointer" data="54021" class="copybut" id="copybut54021" onclick="doCopy('code54021')">Matcher matcher=pattern.matcher(input); <u>while(matcher.find()){ </u>System.out.println(matcher.group(2)); </a>} </span> </div> <div class="codebody" id="code54021"> <br>例 16: 単語と数字が混在する文字列の単語部分を大文字にします。<br><br><br><br><br><br>コードをコピーします。 > <br> </div> コードは次のとおりです: <br><strong> <br>String regex="([a-zA-Z] [0-9] )"; </strong>パターン pattern=パターン。コンパイル(正規表現) ; <div class="codetitle">文字列 input="年齢 45 給与 500000 50000 タイトル"; <span>StringBuffer sb=new StringBuffer(); ()){ <a style="CURSOR: pointer" data="18368" class="copybut" id="copybut18368" onclick="doCopy('code18368')">文字列置換=matcher.group(1).toUpperCase(); <u>matcher.appendReplacement(sb, replace); </u>matcher.appendTail(sb); System.out.println("置換された文字列は " sb.toString());</a></span> </div> </div> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="IE6-IE9 は table.innerHTML ソリューション Sharing_JavaScript スキルをサポートしていません" href="https://m.php.cn/ja/faq/18631.html">IE6-IE9 は table.innerHTML ソリューション Sharing_JavaScript スキルをサポートしていません</a></span><span>次の記事:<a class="dBlack" title="IE6-IE9 は table.innerHTML ソリューション Sharing_JavaScript スキルをサポートしていません" href="https://m.php.cn/ja/faq/18633.html">IE6-IE9 は table.innerHTML ソリューション Sharing_JavaScript スキルをサポートしていません</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="https://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ja/faq/1609.html" title="Bootstrap リスト グループ コンポーネントの詳細な分析" class="aBlack">Bootstrap リスト グループ コンポーネントの詳細な分析</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1640.html" title="JavaScript関数のカリー化の詳細説明" class="aBlack">JavaScript関数のカリー化の詳細説明</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1949.html" title="JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)" class="aBlack">JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2248.html" title="Angularjs は WeChat UI (weui) を統合します" class="aBlack">Angularjs は WeChat UI (weui) を統合します</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2351.html" title="JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル" class="aBlack">JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="https://m.php.cn/ja/about/us.html">私たちについて</a><a href="https://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="https://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>