目次
1. 正規表現の概要:
2 番目に、正規表現を読む練習をします。
3、JavaScriptのRegExpオブジェクト
说明
提示和注释

正規表現の基礎入門と学習例

Jun 26, 2017 pm 01:41 PM
ベース 勉強 通常 表現

私は正規表現を使用する必要がある状況に頻繁に遭遇し、常に習慣的に検索、コピー、ペーストを行っていますが、時間が経つにつれ、以前は正規表現について少しは知っていましたが、今では複雑な表現を読むことさえ難しくなりました。したがって、ここでは、基本から始めて、いくつかの一般的な表現を記録し、正規表現を読み取る能力を練習し、JavaScript の regexp オブジェクトについて簡単に紹介することにしました。

1. 正規表現の概要:

正規表現: 一般文字特殊文字で構成されるテキストパターンであり、文字列に部分文字列が含まれているかどうかを確認するために使用できます。文字列を置換するか、文字列から部分文字列を抽出します。正規表現の構築 数式と同じように、小さな式を組み合わせてより大きな式を構築できます。

通常の文字: 通常の文字には、メタキャラクターとして明示的に指定されていないすべての印刷可能文字と印刷不可能な文字が含まれます。これには、すべての大文字と小文字、すべての数字、すべての句読点、およびその他の記号が含まれます。

非印刷文字
非印刷文字 説明
cx x で指定された制御文字と一致します。たとえば、cM は Control-M または復帰文字と一致します。 x の値は、A ~ Z または a ~ z のいずれかでなければなりません。それ以外の場合、c はリテラルの「c」文字として扱われます。
f はフォーム フィードと一致します。 x0c および cL に相当します。
n は改行文字と一致します。 x0a および cJ に相当します。
r は復帰文字と一致します。 x0d および cM に相当します。
s スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。
S は、空白以外の文字と一致します。 [^ fnrtv]
t に相当し、タブ文字と一致します。 x09 と同等で、cI
v は垂直タブ文字と一致します。 x0b および cK と同等

特殊文字: ワイルドカード「*」など、特別な意味を持つ一部の文字。これらの文字を文字列内で検索したい場合、つまりバックスラッシュをエスケープする必要があります。

ワイルドカード
特殊文字 説明
$ 入力文字列の終了位置と一致します。
() 部分式の始まりと終わりをマークします。
* 前の部分式と 0 回以上一致します。
+ 前の部分式と 1 回以上一致します。
. 改行文字 n を除く任意の 1 文字と一致します。
[ 角括弧式の始まりを示します。
? 先行する部分式と 1 回または 0 回一致するか、非貪​​欲修飾子を指定します。
次の文字を特殊文字、メタキャラクター、後方参照、または 8 進エスケープ文字としてマークします。
^ は、角括弧式で使用されない限り、入力文字列の先頭と一致します。角括弧式で使用される場合は、文字セットが受け入れられないことを示します。
{ 修飾子式の始まりをマークします。
| 2 つの項目の間の選択を示します。

修飾子: 修飾子は、一致数を満たすために正規表現の特定のコンポーネントが何回出現する必要があるかを指定するために使用されます。一致数は固定されておらず、主に {0 または 1}、{1 または n が含まれます。 }、{0または1}、{n}、{n以上}、{n以上、m以下}の6種類。対応する式は *、+、? です。 、{n}、{n,}、{n,m}。

Qualifier
Qualifier Description
* 直前の部分式と 0 回以上一致します。
+ は、前の式と 1 回以上一致します。
? 先行する部分式と 0 回または 1 回一致します。
{n} n は、特定の回数 n 回一致する非負の整数です。
{n,} n は、少なくとも n 回一致する非負の整数です。
{n,m} m,n は非負の整数、n

ロケーター: ロケーターを使用すると、行の先頭または末尾に正規表現を固定できます。また、単語内、単語の先頭、または 1 回以上の単語の末尾に現れる正規表現などの特別な表現を作成することもできます。ロケーターは、文字列または単語の境界を記述するために使用されます。

ロケーター
文字 説明
^ 入力文字列の開始位置と一致します。 RegExp を Multiline 属性に設定すると、n と r の後の位置を一致させることもできます。
$ は、入力文字列の末尾と一致します。 RegExp を Multiline 属性に設定すると、n と r の後の位置を一致させることもできます。
b は、単語の境界、つまり単語とスペースの間の位置に一致します。
B 非単語境界のマッチング。

注: アンカー ポイントで修飾子を使用することはできません。改行または単語境界の前後に複数の位置を指定することはできないため、「^* のような式」は使用できません。

テキスト行の先頭のテキストと一致するには、正規表現の先頭に ^ を配置する必要があります。テキスト行の末尾のテキストと一致するには、正規表現の末尾に $ を使用します。この ^ または $ の使用と、括弧内での式の使用を混同しないでください。

例:

/^Chapter [1-9][0-9]{0,1}/ Chapter で始まる 2 桁の章タイトルと一致します

/^Chapter [1- 9][0-9]{0,1}$/ は章のタイトルの先頭と末尾の両方に一致します。つまり、この行には章のタイトルのみが含まれます。

/bCha/ は単語の境界、つまり始まりに一致します。 Cha で始まる境界を持つ

/terb/ ter で終わる単語。

/Bapt/、章一致の apt などの単語以外の境界に一致しますが、aptitude は一致しません。

Select: 隣接する選択項目の間のすべての項目を括弧で囲みます。スペースを区切るには | を使用します。しかし、括弧を使用すると、関連する一致がキャッシュされ、この時点で利用可能になるという副作用があります。 : この副作用を排除する最初のオプションとして入れます

非キャプチャ要素:

? : キャッシュの不要な副作用を排除するには、選択範囲の最初のオプションの前に配置します。
? = 前方参照。括弧内の通常のパターンと一致し始める検索文字列と一致します。
? ! 逆事前検索。通常のパターンに一致しない任意の開始位置で検索文字列を照合します。

後方参照: (不可解ですが、私は C 言語の再帰について考えています...) 平たく言えば、後方参照とは、次の記事で n を介してバッファーにアクセスするために使用される、キャッシュされたパターンへの参照を指すと思います。 。正規表現パターンまたはパターンの一部をかっこで囲むと、関連付けられた一致が一時バッファー (部分文字列と同様) に保存されます。最初に述べたことを思い出してください。正規表現は数式のようなもので、小さな単純な式で構成されます。式は大きな複雑な式に結合され、これらの一時バッファはそれらの小さな式の一致結果として理解でき、キャプチャされた各部分一致は式の左から右の順序で保存されます。バッファ番号は 1 から始まり、最大 99 個のキャプチャされた部分式を保存できます。各バッファには n 単位でアクセスできます。n は、特定のバッファを識別する 1 桁または 2 桁の 10 進数です。非キャプチャーメタキャラクターは使用できますか? :、? =、? !キャプチャをオーバーライドし、関連する一致のキャッシュを無視します。

後方参照の最も単純で最も便利なアプリケーションの 1 つは、テキスト内で隣接する 2 つの同一の単語の一致を検索する機能を提供します。

eg1: 同一の単語を抽出します。

var str=これはガソリン代が上がっているのですか?

var patt1= /b([a-z]+) 1b/;

document.write(str.match(patt1));

この例から、URL を分割します。または 大きな式のサブキーを抽出すると使用すると、この後方参照は少しわかりにくいように感じます。 (とりあえずここに置いて、メモしておき、後で修正します); varpatt1=/w+:// ^#

]

*)/;

arr = str.match(patt1);

2 番目に、正規表現を読む練習をします。

1./chapter [1-9][0-9]/

この式は、chapter + 1、19、109、10099 などの任意の整数に一致します。 。 。 。

まず、前の章が固定され、[1-9] も固定され、次に [0-9] が修飾子 * で修飾されます。これは、0 回または複数回出現できることを意味します。したがって、空、1 ビット、または複数ビットにすることができます。

2./[a-zA-z]+://[^s]*/

一致する URL

3./d{3}-d{8}|d{4}-{7,8 }/

国内の電話番号と一致します

4.[1-9][0-9]{4,}

Tencent QQ番号と一致します

5.[1-9]d{5}(?!d)

国内の郵便番号と一致する

6.^(d{6})(d{4})(d{2})(d{2})(d{3})([0-9]|X) $

は 18 桁の ID 番号

7 に一致します。^[1-9]d*$

は正の整数

8 に一致します。^-[1-9]d*

は負の整数

に一致します9. ^-?[1-9]d*$

は整数と一致します

10.^[1-9]d*.d*|0.d*[1-9]d*$

は正の浮動小数点と一致します点番号

11.^-[1-9]d*.d*|-0.d*[1-9]d*$

は負の浮動小数点数と一致します

3、JavaScriptのRegExpオブジェクト

1。 正規表現 Expression オブジェクトを作成する :

new RegExp(pattern, attributes);
pattern パラメータは文字列である正規表現を参照し、attributes は g、i、m を含むオプションのパラメータです。 。それぞれ、グローバル マッチング、大文字と小文字を区別するマッチング、および複数行のマッチングを指します。

2.RegExP オブジェクトのプロパティ:

global: RegExp オブジェクトにフラグ m があるかどうか

例: if (patt1.global) { alert("グローバル プロパティが設定されました");

ignoreCase: RegExp オブジェクトにフラグ m があるかどうか;

laseIndex: 次の一致が始まる文字位置をマークする整数;

multiline: RegExp オブジェクトにフラグ m があるかどうか。正規表現の元のテキスト。

3.

RegExp オブジェクトのメソッド

:

compile

: 正規表現をコンパイルします。 compile() には 2 つの用途があります。1 つ目は、スクリプトの実行中に正規表現をコンパイルすることです。 2 つ目は、正規表現を変更して再コンパイルすることです。例: RegExpObject.compile(regexp,modifier);

最初のパラメータは正規表現で、2 番目のパラメータは一致するタイプを指定します。

exec:检索字符串中指定的值,返回找到的值并确定其位置。

eg:RegExpObject.exec(string);//返回一个结果,用于存放匹配的数组,如果未找到匹配,则为null。

说明:

exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。

如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。

但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

提示和注释

重要事项:如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。

提示:请注意,无论 RegExpObject 是否是全局模式,exec() 都会把完整的细节添加到它返回的数组中。这就是 exec() 与 String.match() 的不同之处,后者在全局模式下返回的信息要少得多。因此我们可以这么说,在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。

var str = "正则表达式的exec方法测试"; 
var patt = new RegExp("exec","g");var result;while ((result = patt.exec(str)) != null)  {
          document.write('result:'+result);
            document.write("<br />");
            document.write('patt.lastIndex:'+patt.lastIndex);
          }
ログイン後にコピー

test:检索字符串中指定的值,返回true或false。

eg:var result = patt1.test(str);

4.支持正则表达式的string对象的方法

search:检索与正则表达式相匹配的值。

stringObj.search(regexp);//参数可以是子串,也可以是regexp对象。

注意:search()方法不执行全局匹配,它将忽略标志g,它同时忽略regexp的lastIndex属性,并且总是从字符串开始进行检索,所以他的返回值始终是sgringObj的第一个匹配的位置。如果要忽略大小写应追加i标记。

document.write(str.search(/abc/i);

match:找到一个或多个正则表达式的匹配。

stringObj.match(searchValue);//参数为要检索的字符串值

stringObj.match(regexp);//要匹配的模式的regexp对象。

返回存放匹配结果的数组。该数组的内容依赖于regexp是否具有全局属性g;

说明

match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。

如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。

如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。

注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。

eg:document.write(str.match(/\d+/g));

replace:替换与正则表达式匹配的子串。

stringObect.replace(regexp/substr,replacement);

regexp/substr:必须,正则表达式或者自字符串。

replacement):一个字符串值,规定了替换文本或生成替换文本的函数。

返回一个新的字符串,使用replacement替换第一次匹配或者所有匹配之后得到的。注意:指定g全局变量则替换所有的匹配,否则只替换第一次匹配到的字符串。

split:把字符串分割为字符串数组。

stringObect.split(separator,howmany);

separator:必须,字符串或正则表达式,从该参数指定的地方分割字符串;

howmany:可选,指定返回数组的最大长度,若设置了该参数,返回的子串不会多余这个参数指定的数组,如果没有设置该参数,整个字符串都会被分割。

返回一个字符串数组,不包括separator本身。

 

<br><br>
ログイン後にコピー

以上が正規表現の基礎入門と学習例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

pip を完全にアンインストールし、Python をより効率的に使用する方法を学びます pip を完全にアンインストールし、Python をより効率的に使用する方法を学びます Jan 16, 2024 am 09:01 AM

もうpipは必要ありませんか? pip を効果的にアンインストールする方法を学びましょう!はじめに: pip は Python のパッケージ管理ツールの 1 つで、Python パッケージを簡単にインストール、アップグレード、アンインストールできます。ただし、別のパッケージ管理ツールを使用したい場合や、Python 環境を完全にクリアする必要がある場合など、pip をアンインストールする必要がある場合があります。この記事では、pip を効率的にアンインストールする方法を説明し、具体的なコード例を示します。 1. pip をアンインストールする方法 以下では、pip をアンインストールする 2 つの一般的な方法を紹介します。

C言語の魅力に迫る ~プログラマーの可能性を引き出す~ C言語の魅力に迫る ~プログラマーの可能性を引き出す~ Feb 24, 2024 pm 11:21 PM

C言語学習の魅力:プログラマーの可能性を引き出す テクノロジーの発展に伴い、コンピュータプログラミングは大きな注目を集めている分野です。数あるプログラミング言語の中でもC言語は常にプログラマーに愛されています。そのシンプルさ、効率性、幅広い用途により、C 言語の学習は、多くの人にとってプログラミングの分野に入る最初のステップとなっています。この記事では、C言語を学ぶ魅力と、C言語を学ぶことでプログラマーの可能性を引き出す方法について解説します。 C言語学習の魅力は、まずその簡単さにあります。他のプログラミング言語と比較すると、C言語は

Pygame 入門: 包括的なインストールと構成のチュートリアル Pygame 入門: 包括的なインストールと構成のチュートリアル Feb 19, 2024 pm 10:10 PM

Pygame をゼロから学ぶ: 完全なインストールと構成チュートリアル、特定のコード例が必要 はじめに: Pygame は、Python プログラミング言語を使用して開発されたオープン ソースのゲーム開発ライブラリであり、豊富な機能とツールを提供し、開発者はさまざまなタイプのゲームを簡単に作成できますゲームの。この記事は、Pygame をゼロから学習するのに役立ち、完全なインストールと構成のチュートリアルと、すぐに始めるための具体的なコード例を提供します。パート1:最初にPythonとPygameをインストールして、確認してください

Wordでルート番号を入力する方法を一緒に学びましょう Wordでルート番号を入力する方法を一緒に学びましょう Mar 19, 2024 pm 08:52 PM

Word でテキスト コンテンツを編集するときに、数式記号の入力が必要になる場合があります。 Word でルート番号を入力する方法を知らない人もいるので、Xiaomian は私に、Word でルート番号を入力する方法のチュートリアルを友達と共有するように頼みました。それが私の友達に役立つことを願っています。まず、コンピュータで Word ソフトウェアを開き、編集するファイルを開き、ルート記号を挿入する必要がある場所にカーソルを移動します。下の図の例を参照してください。 2. [挿入]を選択し、記号内の[数式]を選択します。下の図の赤丸で示すように: 3. 次に、下の[新しい数式を挿入]を選択します。以下の図の赤丸で示すように: 4. [根号式]を選択し、適切な根号を選択します。下の図の赤丸で示したように、

Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? May 31, 2024 am 10:32 AM

Golang の正規表現では、パイプ文字 | を使用して複数の単語または文字列を一致させ、各オプションを論理 OR 式として区切ります。例: 「fox」または「dog」に一致します: fox|dog は「quick」、「brown」または「lazy」に一致します: (quick|brown|lazy) 「Go」、「Python」または「Java」に一致します: Go| Python |Java は単語または 4 桁の郵便番号と一致します: ([a-zA

Go言語のmain関数をゼロから学ぶ Go言語のmain関数をゼロから学ぶ Mar 27, 2024 pm 05:03 PM

タイトル: Go言語のmain関数をゼロから学ぶ Go言語はシンプルで効率的なプログラミング言語として開発者に好まれています。 Go 言語では、main 関数はエントリ関数であり、すべての Go プログラムにはプログラムのエントリ ポイントとして main 関数が含まれている必要があります。この記事ではGo言語のmain関数をゼロから学ぶ方法と具体的なコード例を紹介します。 1. まず、Go 言語開発環境をインストールする必要があります。公式ウェブサイト (https://golang.org) にアクセスできます。

pip のインストールをすぐに学び、スキルを一からマスターしましょう pip のインストールをすぐに学び、スキルを一からマスターしましょう Jan 16, 2024 am 10:30 AM

pip のインストールを最初から学び、すぐにスキルをマスターしてください。特定のコード例が必要です。 概要: pip は、Python パッケージを簡単にインストール、アップグレード、管理できる Python パッケージ管理ツールです。 Python 開発者にとって、pip の使用スキルを習得することは非常に重要です。この記事では、pip のインストール方法を最初から紹介し、読者が pip の使用法をすぐにマスターできるように、いくつかの実践的なヒントと具体的なコード例を示します。 1. pip のインストール pip を使用する前に、まず pip をインストールする必要があります。ピップ

これらの 20 の Dune 分析ダッシュボードを理解し、チェーン上の傾向をすばやく把握します これらの 20 の Dune 分析ダッシュボードを理解し、チェーン上の傾向をすばやく把握します Mar 13, 2024 am 09:19 AM

オリジナル著者: Minty、暗号化 KOL オリジナル編集者: Shenchao TechFlow 使い方を知っていれば、Dune はオールインワンのアルファ ツールです。これらの 20 の Dune ダッシュボードを使用して、研究を次のレベルに引き上げましょう。 1. TopHolder 分析 @dcfpascal が開発したこのシンプルなツールは、ホルダーの月間アクティビティ、ユニークホルダー数、ウォレット損益率などの指標に基づいてトークンを分析できます。リンクを参照: https://dune.com/dcfpascal/token-holders2. トークンの概要メトリクス @andrewhong5297 がこのダッシュボードを作成し、ユーザーのアクションを分析してトークンを評価する方法を提供します。

See all articles