3. 正则表达式定义
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
3.1 普通字符
由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。
3.2 非打印字符
字符 |
含义 |
cx |
匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 c 字符。 |
f |
匹配一个换页符。等价于 x0c 和 cL。 |
|
匹配一个换行符。等价于 x0a 和 cJ。 |
|
匹配一个回车符。等价于 x0d 和 cM。 |
s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f
v]。 |
S |
匹配任何非空白字符。等价于 [^ f
v]。 |
|
匹配一个制表符。等价于 x09 和 cI。 |
v |
匹配一个垂直制表符。等价于 x0b 和 cK。 |
3.3 特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如上面说的"*.txt"中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个。ls *.txt。正则表达式有以下特殊字符。
特别字符 |
说明 |
$ |
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配
或 。要匹配 $ 字符本身,请使用 $。 |
( ) |
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 |
* |
匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 |
+ |
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 |
. |
匹配除换行符
之外的任何单字符。要匹配 .,请使用 。 |
[ |
标记一个中括号表达式的开始。要匹配 [,请使用 [。 |
? |
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 |
|
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, n 匹配字符 n。
匹配换行符。序列 \ 匹配 "",而 ( 则匹配 "("。 |
^ |
匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。 |
{ |
标记限定符表达式的开始。要匹配 {,请使用 {。 |
| |
指明两项之间的一个选择。要匹配 |,请使用 |。 |
正規表現を構築する方法は、数式を作成する方法と同じです。つまり、さまざまなメタ文字と演算子を使用して小さな式を結合し、より大きな式を作成します。正規表現のコンポーネントは、単一の文字、文字のコレクション、文字の範囲、文字間の選択、またはこれらすべてのコンポーネントの任意の組み合わせにすることができます。
3.4 修飾子
修飾子は、一致を満たすために正規表現の特定のコンポーネントが何回出現する必要があるかを指定するために使用されます。 * または + または ? または {n} または {n,} または {n,m} の 6 種類があります。
*、+、および ? 修飾子はすべて、できるだけ多くのリテラルと一致するため、それらの後に ? を追加するだけで、非貪欲または最小限の一致が実現されます。
正規表現の修飾子は次のとおりです:
キャラクター |
説明 |
* |
直前の部分式と 0 回以上一致します。たとえば、zo* は「z」と「zoo」に一致します。 * {0,} に相当します。 |
+ |
前述の部分式と 1 回以上一致します。たとえば、zo+ は「zo」と「zoo」には一致しますが、「z」には一致しません。 + は {1,} と同等です。 |
?
| 直前の部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「do」または「does」の「do」と一致します。 ? {0,1} に相当します。 |
{n}
| n は負ではない整数です。特定の回数 n 回一致します。たとえば、o{2} は「Bob」の o とは一致しませんが、「food」の両方の o には一致します。 |
{n,}
| n は負ではない整数です。少なくとも n 回一致します。たとえば、o{2,} は、「Bob」の o には一致しませんが、「foooood」のすべての o に一致します。 o{1,} は o+ と同等です。 o{0,} は o* と同等です。 |
{n,m}
| m と n は両方とも非負の整数であり、n
3.5 ロケーター
文字列または単語の境界を記述するために使用され、^ と $ はそれぞれ文字列の先頭と末尾を指し、B は単語の前または後ろの境界を表します。単語以外の境界。
ロケーターに修飾子を使用することはできません。
3.6 選択
すべての選択項目を括弧で囲み、隣接する選択項目を | で区切ります。ただし、括弧を使用すると、関連する一致がキャッシュされるという副作用が生じます。この場合、最初のオプションの前に ?: を使用すると、この副作用を排除できます。
このうち、?: は非キャプチャ要素の 1 つで、他の 2 つの非キャプチャ要素は ?= と ?! です。この 2 つは前方参照であり、括弧内にあるものと一致します。後者は、正規表現パターンに一致しない任意の位置の検索文字列に一致します。
3.7 バックリファレンス
正規表現パターンまたはパターンの一部を括弧で囲むと、関連付けられた一致が一時バッファーに保存され、キャプチャされた各サブマッチが正規表現パターンの左から右にキャプチャされます。遭遇したコンテンツが保存されます。部分一致が格納されるバッファには、1 から始まり、最大 99 個の部分式まで連続した番号が付けられます。各バッファが使用可能
access。ここで、n は特定のバッファを識別する 1 桁または 2 桁の 10 進数です。
非キャプチャメタ文字 ?:、?=、または ?! を使用して、関連する一致の保存を無視できます。
http://www.bkjia.com/PHPjc/532539.html
www.bkjia.com本当http://www.bkjia.com/PHPjc/532539.html技術記事 3. 正規表現の定義 正規表現 (正規表現) は、文字列に特定の部分文字列が含まれているかどうかを確認し、一致する部分文字列を置換するために使用できる文字列一致パターンを記述します...