Latest web development tutorials

Expressions régulières - Syntaxe

Regex (expression régulière) décrit un ensemble de chaînes qui peuvent être utilisés pour vérifier si une chaîne contient une certaine chaîne correspondant à chaîne ne remplacer ou supprimer une condition correspond à une chaîne d'une chaîne et ainsi de suite.

  • Le catalogue de la colonne, dir * .txt ls * .txt ou * .txt ne sont pas dans une expression régulière, car il * est * avec signifiant expression régulière est différente.
  • Le procédé de construction d'une expression régulière et de créer des expressions mathématiques de la même façon. Autrement dit, en utilisant une variété de métacaractères et les opérateurs peuvent se combiner de petites expressions ensemble pour créer des expressions plus grandes. expressions régulières composant peut être un seul caractère, jeu de caractères, sélectionnez une plage de caractères, entre les caractères, ou une combinaison de tous ces composants.

Les expressions régulières sont en mode texte se compose de caractères communs (tels que les lettres de A à Z) et des caractères spéciaux (appelés "-caractères meta") de celle-ci. Description du mode lors de la recherche pour le texte pour correspondre à une ou plusieurs chaînes. Expression régulière comme un modèle, un mode de caractère et la chaîne de recherche pour correspondre.

Les caractères ordinaires

Les caractères ordinaires ne sont pas explicitement désignés comme métacaractères tous les caractères imprimables et non imprimables. Cela comprend toutes les lettres majuscules et minuscules, tous les chiffres, la ponctuation et d'autres symboles.

Les caractères non-impression

Les caractères non-impression peuvent également être une partie de l'expression régulière. Le tableau suivant dresse la liste des séquences d'échappement qui représentent des caractères non-impression:

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

caractères spéciaux

Les caractères dits spéciaux, est que certains caractères ont une signification particulière, comme il est dit "* .txt" en *, signifie simplement que la représentation de chaîne de toute signification. Si vous voulez trouver le nom du fichier avec le fichier *, vous avez besoin pour échapper à la *, qui est un plus en face \. ls \ *. txt.

Beaucoup de métacaractères nécessitent un traitement spécial en essayant de les faire correspondre. Pour faire correspondre ces caractères spéciaux, vous devez d'abord le caractère «évasion», qui est, le caractère barre oblique inverse (\) en face d'eux. Le tableau suivant répertorie les caractères spéciaux d'expression régulière:

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。

qualificateur

Qualifier est utilisé pour spécifier l'expression régulière d'un composant donné doit apparaître plusieurs fois pour rencontrer le match. Il * ou + ou? Ou {n} ou {n,} ou {n, m} un total de 6.

Les expressions régulières sont qualifiés:

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {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 <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

Étant donné que le numéro de chapitre dans un grand document d'entrée sera probablement plus de neuf, si vous avez besoin d'un moyen de traiter avec deux ou trois numéros de chapitres. Qualifier vous donne cette possibilité. L'expression régulière suivante correspond à un certain nombre de bits de titres de chapitres numérotés:

/Chapter [1-9][0-9]*/

S'il vous plaît noter que le qualificatif apparaît après l'expression de gamme. Ainsi, il applique à l'ensemble de la gamme d'expression, dans ce cas, seul le nombre spécifié de 0-9 (y compris 0 et 9).

+ Qualifier ne sert pas ici, comme dans la seconde position ou la position arrière ne pas nécessairement besoin d'avoir un certain nombre. utiliser Nor? Caractère, car elle limite les numéros de chapitre à seulement deux chiffres. Vous devez faire correspondre au moins un chapitre de nombre et d'espace caractères arrière.

Si vous connaissez le numéro de chapitre est limité à seulement 99 chapitres, vous pouvez utiliser l'expression suivante pour spécifier au moins une, mais au moins deux chiffres.

/Chapter [0-9]{1,2}/

L'inconvénient de l'expression ci-dessus est supérieure à 99 chapitres dénombreras toujours seulement correspond au début de deux chiffres. Un autre inconvénient est que le chapitre 0 correspondra également. Une meilleure adéquation entre seulement deux chiffres d'expression est la suivante:

/Chapter [1-9][0-9]?/

ou

/Chapter [1-9][0-9]{0,1}/

*, +, Et? Qualifiers sont avides parce qu'ils correspondent à autant de texte, seulement derrière eux, plus un? Peut - on obtenir match de non-avide ou minimal.

Par exemple, vous pouvez rechercher des documents HTML pour trouver ci-joint dans H1 titres de section de tags. Le texte de votre document comme suit:

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

Tous les contenus correspondent aux expressions suivantes à partir de signe inférieur (<) pour fermer la balise H1 est symbole supérieur (>) entre les deux.

/<.*>/

Si vous avez seulement besoin de faire correspondre le début des balises H1, l'expression suivante "non gourmand" correspond seulement <H1>.

/<.*?>/

Par *, + ou? Après le lieu de qualification? Les expressions peuvent passer de "gourmand" à "non gourmand" ou minime correspondance d'expression.

Locator

Locator vous permet d'expression régulière est fixée au début ou à la fin de la ligne. Ils vous permettent également de créer une expression régulière, ces expressions régulières apparaissent en un mot, un mot au début ou à la fin d'un mot.

Locator utilisé pour décrire la chaîne ou limite de mot, ^ et $ référer au début et à la fin de la chaîne, \ b description des limites avant ou après le mot, \ B représente une limite non-mot.

Les expressions régulières sont qualifiés:

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

Remarque: Vous ne pouvez pas utiliser le point de qualification et d' ancrage. Parce immédiatement avant ou après les limites d'emballage ou de mot ne peut pas avoir plus d'un endroit, et donc ne permet pas une telle expression comme ^ *.

Pour correspondre à une ligne de texte au début du texte, s'il vous plaît commencer à utiliser l'expression n ^ caractère. ^ Ne pas utiliser cet usage l'expression entre parenthèses dans le confusion.

Pour faire correspondre le texte à la fin d'une ligne de texte, voir la fin de l'expression en utilisant $ caractères dans le positif.

Pour utiliser les titres de section dans la recherche lorsque le point d'ancrage, l'expression régulière suivante correspond à un titre de chapitre, le titre ne contient que deux suivi d'un numéro, et le début de la ligne:

/^Chapter [1-9][0-9]{0,1}/

têtes de chapitre vrais apparaissent seulement au début de la ligne, mais il est le seul texte de la ligne. Il semble que la première ligne est apparue à la fin de la même rangée. L'expression suivante peut être sûr que le match spécifié correspond seulement sans correspondant à la section de référence. En créant seulement correspondre au début et à la fin d'une ligne de texte de l'expression régulière, vous pouvez le faire.

/^Chapter [1-9][0-9]{0,1}$/

mot de match frontière est légèrement différente, mais les expressions régulières une capacité très importante. limite de mot est l'emplacement et l'espace entre les mots. Non-limite de mot est tout autre endroit. L'expression suivante correspond au début du mot Chapitre trois personnages, parce que ces trois personnages apparaissent après une limite de mot:

/\bCha/

\ Position de caractère B est très important. Si elle est située au début de la chaîne à comparer, on cherche une correspondance au début du mot. Si elle est à l'extrémité de la chaîne, il cherche une correspondance, à la fin d'un mot. Par exemple, l'expression suivante correspondant à des mots chaîne de chapitre ter, tel qu'il apparaît en face de la limite de mot:

/ter\b/

L'expression suivante correspond à la chaîne Chapitre apt, mais ne correspond pas à l'aptitude de chaîne apt:

/\Bapt/

Apt chaîne de mot apparaît dans le chapitre non-limite de mot, mais le mot apparaît dans l'aptitude du mot frontière. Pour \ 'opérateur limite non-mot B, la position n'a pas d'importance, parce que le match ne se soucie pas que ce soit au début ou à la fin d'un mot.

sélectionner

Utilisez des parenthèses pour entourer toutes les sélections, avec des options entre adjacentes séparées par |. Mais il y a un effet secondaire de l'utilisation de parenthèses, est matchs pertinents seront mis en cache, disponibles à ce moment :? Sur la première option pour éliminer cet effet secondaire.

En quoi :? non-capture un élément, il y a deux non-capture élément est = et les deux ont plus de sens, l'ancien pré-enquête positive, en tout début étant entre parenthèses appariées est l'expression ??! motif de position pour correspondre à la chaîne de recherche, qui est pré-enquête négative, dans toutes les positions de départ ne correspond pas au modèle d'expression régulière pour correspondre à la chaîne de recherche.

backreferences

Pour un motif régulier d'expression ou d'une partie du motif sur les deux côtés se traduira entre parenthèses ajouté match concerné à un tampon de stockage temporaire, chaque apparaissent sous-capturés sont stockés dans l'ordre de gauche à droite dans un match de modèle d'expression régulière. Tampon n ° 1 depuis le début, peut stocker jusqu'à 99 subexpression capturé. Chaque tampon peut utiliser '\ n' visiter, où n est un un ou deux chiffres décimaux identifient le tampon spécifique.

Vous pouvez utiliser les métacaractères non-capture ':?', ou de réécrire la capture, sauf à ignorer le match en question '=?'?! '.

Backreferences plus facile, l'un des plus utile est la capacité de fournir le texte de trouver deux correspondances de mots adjacents identiques. Un exemple dans la phrase suivante:

Is is the cost of of gasoline going up up?

La phrase ci-dessus ont évidemment beaucoup de mots répétés. Si nous pouvons mettre au point une méthode pour trouver la phrase, plutôt que de rechercher les occurrences en double de chaque mot, que le plus de bien. L'expression régulière suivante utilise un seul subexpression pour atteindre cet objectif:

/\b([a-z]+) \1\b/gi

expressions de capture, comme [az] + spécifié, y compris une ou plusieurs lettres. La deuxième partie de l'expression régulière est de faire correspondre un enfant référence précédemment capturé, soit la deuxième occurrence du mot juste compensée par l'expression entre parenthèses. \ 1 spécifie la première sous-partie. Mots métacaractères limites veiller à ce que détecter seulement le mot entier. Sinon, des expressions telles que «est délivré» ou «ceci est» et similaires ne sont pas identifier correctement cette expression.

Expression régulière après variable globale (g) indique, cette expression est appliquée à la chaîne d'entrée peut trouver autant de matches. cas d'expression insensible à la fin de (i) balise spécifie la casse. match de potentiel tag multi-ligne spécifie les sauts de ligne peuvent se produire sur les deux côtés.

Backreferences peut aussi être un indicateur URI (Universal Resource) en ses composants. Supposons que vous voulez être décomposé dans le protocole suivant URI (ftp, http, etc.), les adresses de domaine et page / chemin:

http://www.w3cschool.cc:80/html/html-tutorial.html

L'expression régulière suivante fournit cette fonctionnalité:

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

La première sous-expression entre parenthèses capture la partie de protocole de l'adresse Web. Le sous-expression correspond à un mot colon et deux barres obliques devant. Le deuxième sous-expression entre parenthèses capture la partie adresse de domaine de l'adresse. Un ou plusieurs caractères autres que: subexpression / Match et. Le troisième sous-expression entre parenthèses capturer le numéro de port (si l'on est spécifié). La sous-expression correspond à zéro ou plusieurs chiffres après la virgule. Elle ne peut être répétée une fois que la sous-expression. Enfin, le quatrième sous-expression entre parenthèses capture le chemin d'accès spécifié adresse Web et / ou page. Cela ne comprend pas la sous-expression correspond à toute séquence de caractères # ou caractères d'espace.

L'expression régulière appliquée au-dessus de l'URI, l'entrée de sous-matching contient les éléments suivants:

  • La première sous-expression entre parenthèses contient "http"
  • Le deuxième sous-expression entre parenthèses contient "www.w3cschool.cc"
  • Le troisième sous-expression entre parenthèses avec ": 80"
  • Le quatrième sous-expression entre parenthèses contient "/html/html-tutorial.html"