今回は、C++ での正規表現の使用について詳しく説明します。C++ で正規表現を使用する際の 注意事項 は何ですか?実際のケースを見てみましょう。
Regex (正規表現) は、文字シーケンスを記述するための強力なツールです。正規表現は多くの言語に存在し、C++11 には新しい標準の一部として含まれているだけでなく、ECMASCRIPT、basic、extended、awk、grep、egrep という 6 つの異なる正規表現構文もサポートされています。 。 ECMASCRIPT はデフォルトの構文です。正規表現を作成するときに使用する構文を指定できます。 正規表現はテキストのパターンです。正規表現は、強力で便利、効率的なテキスト処理ツールです。正規表現自体と、ポケット
プログラミング言語のような一般的なパターン表記法を組み合わせることで、ユーザーはテキストを記述および分析することができます。特定のツールによって提供される追加サポートにより、正規表現を使用して、さまざまな種類のテキストとデータを追加、削除、分離、オーバーレイ、挿入、トリミングできます。 文字、数字、下線)。正規表現メタキャラクターは、より強力な説明機能を提供します。
テキスト エディターと同様、Perl、Java、Python、C/C++ などのほとんどの高級プログラミング言語は正規表現をサポートしています。これらの言語には独自の正規表現パッケージがあります。
正規表現は単なる文字列であり、長さに制限はありません。 「部分式」とは、正規表現全体の一部を指し、通常は括弧内の式、または「|」で区切られた複数選択の分岐を指します。
デフォルトでは、式内の文字は大文字と小文字が区別されます。
一般的に使用されるメタ文字:
1. 「.」: 「n」を含む任意の文字と一致するには、「[sS]」などのパターンを使用する必要があります。
2. 「^」:入力文字
文字列の開始位置に一致します。「^」文字自体に一致するには、「^」を使用する必要があります。3. 「$」:入力文字列の末尾に一致します。どの文字にも一致しません。「$」文字自体に一致するには、「$」を使用する必要があります。
4. 「*」: 前の文字または部分式に 0 回以上一致します。 「 *」は「{0,}」と同等です。たとえば、「^*b」は「b」、「^b」、「^^b」、... と一致します。 5. 「+」: 1 つ以上の一致 先行する文字または部分式は「{1,}」と同等です。たとえば、「a+b」は「ab」、「aab」、「aaab」、... と一致します。 ?": ゼロ回 前の文字または部分式に一度に一致します。「{0,1}」に相当します。たとえば、「a[cd]?」は「a」、「ac」、「ad」に一致します。他の修飾子「*」、「+」、「?」、「{n}」、「{n,}」、「{n,m}」が続く場合、一致パターンは「非貪欲」になります。 。 「非貪欲」パターンは検索される可能な限り短い文字列に一致しますが、デフォルトの「貪欲」パターンは検索される可能な限り長い文字列に一致します。たとえば、文字列「oooo」では、「o+?」は 1 つの「o」にのみ一致しますが、「o+」はすべての「o」に一致します 7. 「|」: 論理「OR」(または)演算。正規表現「(him|her)」は「itbelongs to his」と「it Belongs to her」に一致しますが、「itbelongs to them」には一致しません。 8. "": 特殊文字としてマークされた次の文字を変更します。文字、テキスト、後方参照、または 8 進エスケープ文字。たとえば、「n」は文字「n」に一致し、「n」は改行文字に一致し、シーケンス「\」は「","("一致"(";9. 「w」: 文字、数字、またはアンダースコア、つまり A ~ Z、a ~ z、0 ~ 9、_ のいずれかに一致します。
10. 「W」: 一致します。文字、数字、またはアンダースコアではない任意の文字
11. "s": スペース、タブ、フォーム フィードなどの任意の空白文字を含む、「[fnrtv]」と同等の空白文字と一致します。 ";
12. "S": "[^fnrtv]" に相当する、空白文字ではない任意の文字に一致します。
13. "d": 0 から 9 までの任意の数字に一致します。 、など。「[0-9]」に相当します。
14. 「D」: 「[^0-9]」に相当する任意の非数字文字に一致します。 15. 「b」: 単語に一致します。つまり、単語とスペースの間の位置、つまり単語とスペースの間の位置はどの文字とも一致しません。たとえば、「erb」は「never」の「er」と一致しますが、一致します。 「動詞」の「er」とは一致しません
16. 「B」: 非単語境界一致。「erB」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。 ;
17. "f": "x0c" および "cL" に相当する改行文字に一致します。
18. "n": "x0a" および "cJ" に相当します。 19. "r": 復帰文字に一致し、"x0d" および "cM" に相当します。 20. "t": タブ文字に一致し、"x09" および "cI" に相当します。 v": 垂直タブ文字に一致し、"x0b" および "cK" に相当します。
22. "cx": "x" で示される制御文字に一致します。たとえば、cM は Control-M または復帰文字に一致します。 "x" の値は "A-Z" または "a-z" 内にある必要があります。そうでない場合は、c が "c" 文字そのものであるとみなされます
23. "{n}": "n " は、n 回正確に一致する非負の整数です。たとえば、「o{ 2}」は、「Bob」の「o」とは一致しませんが、「food」の 2 つの「o」と一致します。
24 . "{n,}": "n" は負ではない整数で、少なくとも n 回一致します。たとえば、"o{2,}" は "Bob" の "o" には一致しませんが、すべての " に一致します。 「foooood」の「o」、「o{1,}」は「o+」と同等、「o {0,}」は「o*」と同等;
25. "{n,m}": "n " と "m" は非負の整数です。n
26. "x|y": "x" または "y" に一致します。たとえば、"z|food" は "z" または "food" に一致します。 "food";
27. "[xyz]": 文字セット。含まれる任意の文字と一致します。たとえば、"[abc ]" は "plain" の "a" と一致します。
28. "[^xyz]":逆文字セット、含まれていない任意の文字に一致、「xyz」以外の任意の文字に一致、「[^ abc]」は「plain」の「p」に一致
29. "[a-z]":
文字範囲; 、指定された範囲内の任意の文字に一致します。たとえば、「[a-z]」は「a」から「z」に一致します。
30. 「[^a-z]」: 範囲内の文字を反転し、任意の文字に一致します。指定された範囲内にない場合、たとえば、「[^a-z]」は「a」から「z」までにない任意の文字と一致します。
31. 「( )」: 「(」と「z」の間の式を定義します。 ")" を "group" グループとして、この式に一致する文字を一時領域に保存します。正規表現で最大 9 個まで保存でき、"1" から "9" までの記号で参照できます。
32. "(pattern)": パターンを照合し、一致する部分式をキャプチャします。$0 ~ $9 属性を使用して、結果の「一致」コレクションからキャプチャされた一致を取得します。33. “(?:pattern)”:匹配pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配,这对于用”or”字符” (|)”组合模式部件的情况很有用, 如,”industr(?:y|ies)”是比”industry|industries”更简略的表达式;
34. “(?=pattern)”: 非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始;
35. “(?!pattern)”: 非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows";
要匹配某些特殊字符,需在此特殊字符前面加上”\”,如要匹配字符”^”、”$”、”()”、”[]”、”{}”、”.”、”?”、”+”、”*”、”|”,需使用” \^”、” \$”、” \ (“、”\)”、” \ [“、”\]”、” \{“、”\}”、” \.”、” \?”、” \+”、” \*”、” \|”。
在C++/C++11中,GCC版本是4.9.0及以上,VS版本为VS2013及以上时,会有regex头文件,此头文件中会有regex_match、regex_search、regex_replace等函数可供调用,以下是测试代码:
#include "regex.hpp" #include <regex> #include <string> #include <vector> #include <iostream> int test_regex_match() { std::string pattern{ "\\d{3}-\\d{8}|\\d{4}-\\d{7}" }; // fixed telephone std::regex re(pattern); std::vector<:string> str{ "010-12345678", "0319-9876543", "021-123456789"}; /* std::regex_match: 判断一个正则表达式(参数re)是否匹配整个字符序列str,它主要用于验证文本 注意,这个正则表达式必须匹配被分析串的全部,否则返回false;如果整个序列被成功匹配,返回true */ for (auto tmp : str) { bool ret = std::regex_match(tmp, re); if (ret) fprintf(stderr, "%s, can match\n", tmp.c_str()); else fprintf(stderr, "%s, can not match\n", tmp.c_str()); } return 0; } int test_regex_search() { std::string pattern{ "http|hppts://\\w*$" }; // url std::regex re(pattern); std::vector<:string> str{ "http://blog.csdn.net/fengbingchun", "https://github.com/fengbingchun", "abcd://124.456", "abcd https://github.com/fengbingchun 123" }; /* std::regex_search: 类似于regex_match,但它不要求整个字符序列完全匹配 可以用regex_search来查找输入中的一个子序列,该子序列匹配正则表达式re */ for (auto tmp : str) { bool ret = std::regex_search(tmp, re); if (ret) fprintf(stderr, "%s, can search\n", tmp.c_str()); else fprintf(stderr, "%s, can not search\n", tmp.c_str()); } return 0; } int test_regex_search2() { std::string pattern{ "[a-zA-z]+://[^\\s]*" }; // url std::regex re(pattern); std::string str{ "my csdn blog addr is: http://blog.csdn.net/fengbingchun , my github addr is: https://github.com/fengbingchun " }; std::smatch results; while (std::regex_search(str, results, re)) { for (auto x : results) std::cout str{ "123456789012345678", "abcd123456789012345678efgh", "abcdefbg", "12345678901234567X" }; std::string fmt{ "********" }; /* std::regex_replace: 在整个字符序列中查找正则表达式re的所有匹配 这个算法每次成功匹配后,就根据参数fmt对匹配字符串进行替换 */ for (auto tmp : str) { std::string ret = std::regex_replace(tmp, re, fmt); fprintf(stderr, "src: %s, dst: %s\n", tmp.c_str(), ret.c_str()); } return 0; } int test_regex_replace2() { // reference: http://www.cplusplus.com/reference/regex/regex_replace/ std::string s("there is a subsequence in the string\n"); std::regex e("\\b(sub)([^ ]*)"); // matches words beginning by "sub" // using string/c-string (3) version: std::cout <p>相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!</p> <p>推荐阅读:</p> <p><a href="http://www.php.cn/js-tutorial-390700.html" target="_blank">使用正则表达式提取字符串详解(附代码)</a></p> <p style="text-align: left;"><a href="http://www.php.cn/js-tutorial-390698.html" target="_blank">容易产生错误的js手机号码验证</a><br></p></:string></:string></iostream></vector></string></regex>
以上がC++ での正規表現の使用方法の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ホットトピック









