ホームページ バックエンド開発 C#.Net チュートリアル C# 正規表現オープンソース ツール

C# 正規表現オープンソース ツール

Feb 07, 2017 pm 03:55 PM

最初に背景を説明します。最近、正規表現は仕事で頻繁に使用されますが、一部の関数は実装が非常に面倒なので、使用しないでください。仕事で頻繁に使用するという意味ではなく、時々使用する必要があるというだけです。しかし、正規表現は一定期間使用されない限り、忘れられるか、完全に忘れられてしまうことさえあります。この無駄な問題をある程度解決するために、私はこのブログと、これから書く予定のオープンソースの正規表現検証ツールのアイデアを思いつきました。実際、ネット上には通常のルールに関する情報がたくさんあります。私がこのブログを書いた理由は、現在または将来の仕事で使用される可能性のあるいくつかの通常のルールを記録し、同時に共有したいと思っています。 .net オープンソース向けのもの。

0.以前書いた

最後に正規表現を本格的に使ったのは3年前だったと記憶していますが、この間散発的に使ってはいましたが、基本的には忘れてしまっているので、このブログに間違いがありましたら。 、どういたしまして、訂正ありがとうございます!ここでは、私の個人的な仕事でよく使用されるいくつかの通常の一致を書き留めました。通常のオープンソース ツールのコーディングに貢献してくれる庭の友人がいる場合は、大歓迎です。

最近、庭に「生理パッチ」が増えてきたんですが、この人たちは暇すぎるのかな?この言語やその環境を批判する暇があるなら、両手を広げて .net オープンソースのトレンドを受け入れたほうが良いでしょう。 .net オープン ソースの登場により、.net の春も到来しました。私たちは .net オープン ソースのために手を差し伸べ、.net コミュニティをますますオープン ソースにする必要があります。もちろん、これは本題から外れます。それらの月経パッチは私には関係ありません。

v1. ソースコードのアドレス

https://github.com/toutouge/TouTou.RegexTool 上に戻る

v2. テキストの始まり

2.1.: ユニバーサルマッチング

C# のユニバーサルマッチングルール。呼び出し元の文字列と対応する正規表現を入力します

/// <summary>
/// 检测字符串中是否包含符合正则的子集
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="reg">正则, e.g. \d+</param>
/// <returns>true:包含,反之不包含</returns>
publicbool CheckContainsByReg(string source, string reg)
{
returnRegex.Match(source, reg).Success;
}
/// <summary>
/// 检测整个字符串是否能匹配正则,而不是包含
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="reg">正则, e.g. ^\d+$</param>
/// <returns>true:匹配,反之不匹配</returns>
publicbool CheckStringByReg(string source, string reg)
{
Regex rg = newRegex(reg, RegexOptions.IgnoreCase);
return rg.IsMatch(source);
}
/// <summary>
/// 从指定字符串中过滤出第一个符合正则匹配的子集
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="reg">正则, e.g. \d+</param>
/// <returns>源字符串的第一个匹配的子集</returns>
publicstring GetFirstStringByReg(string source, string reg)
{
returnRegex.Match(source, reg).Groups[0].Value;
}
/// <summary>
/// 从指定字符串中过滤出所有符合正则匹配的子集
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="reg">正则, e.g. \d+</param>
/// <returns>true:匹配,反之不匹配</returns>
publicList<string> GetStringByReg(string source, string reg)
{
var regex = Regex.Matches(source, reg);
List<string> list =newList<string>();
foreach (Match item in regex)
{
list.Add(item.Value);
}
return list;
}
ログイン後にコピー

2.2.: 数値のマッチング

C# 正規表現はさまざまなニーズに応じて数値をマッチングします

/// <summary>
/// 从指定字符串中过滤出第一个数字
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串的第一个数字</returns>
publicstring GetFirstNumberByString(string source)
{
returnRegex. Match(source, @"\d+").Groups[0].Value;
}
/// <summary>
/// 从指定字符串中过滤出最后一个数字
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串的最后一个数字</returns>
publicstring GetLastNumberByString(string source)
{
var reg = Regex.Matches(source, @"\d+");
return reg[reg.Count -1].Value;
}
/// <summary>
/// 从指定字符串中过滤出所有数字
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串的所有数字</returns>
publicList<string> GetAllNumberByString( string source)
{
var reg = Regex.Matches(source, @"\d+");
List<string> list =newList<string>();
foreach (Match item in reg)
{
list.Add(item.Value);
}
return list;
}
/// <summary>
/// 检车源字符串中是否包含数字
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>true:源字符串包含数字;false:源字符串不包含数字</returns>
publicbool CheckNumberByString(string source)
{
returnRegex. Match(source, @"\d").Success;
}
/// <summary>
/// 判断字符串是否全部是数字且长度等于指定长度
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="length">指定长度</param>
/// <returns>返回值</returns>
publicbool CheckLengthByString(string source, int length)
{
Regex rg = newRegex(@"^\d{" + length +"}$");
return rg.IsMatch(source);
}
ログイン後にコピー

2.3.: 通常の文字列の切り捨て

C# は指定された開始文字列に従って開始をインターセプトします

の間
/// <summary>
/// 截取字符串中开始和结束字符串中间的字符串
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="startStr">开始字符串</param>
/// <param name="endStr">结束字符串</param>
/// <returns>中间字符串</returns>
publicstring Substring(string source, string startStr, string endStr)
{
Regex rg = newRegex("(?<=(" + startStr +"))[.\\s\\S]*?(?=(" + endStr +"))", RegexOptions.Multiline |RegexOptions.Singleline);
return rg.Match(source).Value;
}
ログイン後にコピー

2.4.: 邮箱匹配

C#正则表达式匹配邮箱

/// <summary>
/// 匹配邮箱是否合法
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>匹配结果true是邮箱反之不是邮箱</returns>
publicbool CheckEmailByString(string source)
{
Regex rg = newRegex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$", RegexOptions.IgnoreCase);
return rg.IsMatch(source);
}
ログイン後にコピー

2.5.: URL匹配

C#正则表达式匹配URL

/// <summary>
/// 匹配URL是否合法
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>匹配结果true是URL反之不是URL</returns>
publicbool CheckURLByString(string source)
{
Regex rg = newRegex(@"^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:)*@)?
(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.
(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])
([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*
([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])
([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|
(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:|@)*)*)?)?
(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:|@)|\/|\?)*)?$" , RegexOptions.IgnoreCase);
return rg.IsMatch(source);
}
ログイン後にコピー

2.6.: 日期匹配

C#正则表达式匹配日期

/// <summary>
/// 匹配日期是否合法
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>匹配结果true是日期反之不是日期</returns>
publicbool CheckDateByString(string source)
{
Regex rg = newRegex(@"^(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|
((1|2)[0-9])|30|31)[\/\-]\d{4})$");
return rg.IsMatch(source);
}
/// <summary>
/// 从字符串中获取第一个日期
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串中的第一个日期</returns>
publicstring GetFirstDateByString(string source)
{
returnRegex.Match(source,@"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|
((1|2)[0-9])|30|31)[\/\-]\d{4})").Groups[0].Value;
}
/// <summary>
/// 从字符串中获取所有的日期
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串中的所有日期</returns>
publicList<string> GetAllDateByString( string source)
{
var all = Regex.Matches(source, @"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])
[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})");
List<string> list =newList<string>();
foreach (Match item in all)
{
list.Add(item.Value);
}
return list;
}
ログイン後にコピー

2.7.: 密码匹配

C#正则表达式匹配密码

/// <summary>
/// 检测密码复杂度是否达标:密码中必须包含字母、数字、特称字符,至少8个字符,最多16个字符。
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>密码复杂度是否达标true是达标反之不达标</returns>
publicbool CheckPasswordByString(string source)
{
Regex rg = newRegex(@"^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}$");
return rg.IsMatch(source);
}
ログイン後にコピー

2.8.: 邮编匹配

C#正则表达式匹配邮编

/// <summary>
/// 匹配邮编是否合法
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>邮编合法返回true,反之不合法</returns>
publicbool CheckPostcodeByString(string source)
{
Regex rg = newRegex(@"^\d{6}$");
return rg.IsMatch(source);
}
ログイン後にコピー

2.9.: 电话号码

C#正则表达式匹配电话

/// <summary>
/// 匹配电话号码是否合法
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>电话号码合法返回true,反之不合法</returns>
publicbool CheckTelephoneByString(string source)
{
Regex rg = newRegex(@"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$");
return rg.IsMatch(source);
}
/// <summary>
/// 从字符串中获取电话号码
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串中电话号码</returns>
publicstring GetTelephoneByString(string source)
{
returnRegex. Match(source, @"(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}").Groups[0].Value;
}
ログイン後にコピー

2.10.: 手机号码

C#正则表达式匹配手机号码

/// <summary>
/// 匹配手机号码是否合法
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>手机号码合法返回true,反之不合法</returns>
publicbool CheckMobilephoneByString(string source)
{
Regex rg = newRegex(@"^[1]+[3,5,7]+\d{9}$");
return rg.IsMatch(source);
}
/// <summary>
/// 从字符串中获取手机号码
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串中手机号码</returns>
publicstring GetMobilephoneByString(string source)
{
returnRegex. Match(source, @"[1]+[3,5,7]+\d{9}").Groups[0].Value;
}
ログイン後にコピー

2.11.: 身份证匹配

C#正则表达式匹配身份证号码

/// <summary>
/// 匹配身份证号码是否合法
/// </summary>
/// <param name="source">待匹配字符串</param>
/// <returns>身份证号码合法返回true,反之不合法</returns>
publicbool CheckIDCardByString(string source)
{
Regex rg = newRegex(@"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$");
return rg.IsMatch(source);
}
/// <summary>
/// 从字符串中获取身份证号码
/// </summary>
/// <param name="source">源字符串</param>
/// <returns>源字符串中身份证号码</returns>
publicstring GetIDCardByString(string source)
{
returnRegex. Match(source, @"(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))").Groups[0].Value;
}
ログイン後にコピー

v3.博客总结

关于C#正则表达式开源工具暂时就只积累了这么多。因为目前实际工作中遇到的也就这些,关于这个C#正则表达式开源工具现在只是一个雏形,先把这一分不分享出来,后续得会持续更新C#正则表达式开源工具。希望在以后这个C#正则表达式工具会越来越strong,更希望能得到园友们的support.

以上就是C#正则表达式开源工具的内容,更多相关内容请关注PHP中文网(www.php.cn)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

C#対C:歴史、進化、将来の見通し C#対C:歴史、進化、将来の見通し Apr 19, 2025 am 12:07 AM

C#とCの歴史と進化はユニークであり、将来の見通しも異なります。 1.Cは、1983年にBjarnestrostrupによって発明され、オブジェクト指向のプログラミングをC言語に導入しました。その進化プロセスには、C 11の自動キーワードとラムダ式の導入など、複数の標準化が含まれます。C20概念とコルーチンの導入、将来のパフォーマンスとシステムレベルのプログラミングに焦点を当てます。 2.C#は2000年にMicrosoftによってリリースされました。CとJavaの利点を組み合わせて、その進化はシンプルさと生産性に焦点を当てています。たとえば、C#2.0はジェネリックを導入し、C#5.0は非同期プログラミングを導入しました。これは、将来の開発者の生産性とクラウドコンピューティングに焦点を当てます。

See all articles