Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation des métacaractères réguliers

Explication détaillée de l'utilisation des métacaractères réguliers

php中世界最好的语言
php中世界最好的语言original
2018-03-30 09:49:431736parcourir

Cette fois, je vous apporte une explication détaillée de l'utilisation des métacaractères réguliers. Quelles sont les précautions lors de l'utilisation de métacaractères réguliers. Voici des cas pratiques, jetons un coup d'oeil.

Remarque : Dans tous les exemples, le résultat de correspondance expression régulière est contenu entre [ et ] dans le texte source. Certains les exemples seront implémentés en utilisant Java. S'il s'agit de l'utilisation d'expressions régulières dans Java lui-même, cela sera expliqué à l'endroit correspondant. Tous les exemples Java sont testés sous JDK1.6.0_13.

1. Échapper aux caractères spéciaux

Les métacaractères sont des caractères qui ont des significations particulières dans les expressions régulières. Étant donné que les métacaractères ont une signification particulière dans les expressions régulières, ils ne peuvent pas être utilisés pour se représenter eux-mêmes. Vous pouvez échapper un métacaractère en le faisant précéder d'une barre oblique inverse, de sorte que la séquence d'échappement résultante corresponde à ce caractère lui-même plutôt qu'à sa signification particulière de métacaractère. Par exemple, si vous voulez faire correspondre [et], vous devez y échapper :

et
.

Pour échapper aux métacaractères, vous devez utiliser le caractère slash, ce qui signifie que le caractère lui-même est également un métacaractère. Pour correspondre au caractère lui-même, il doit être échappé vers \. Tel que le chemin du fichier Windows correspondant.

2. Faire correspondre les caractères d'espacement

Les métacaractères peuvent être grossièrement divisés en deux types : l'un est utilisé pour faire correspondre du texte (comme .), et l'autre est régulier. la syntaxe de l'expression l'exige (comme [et]).

Lorsque nous effectuons des recherches d'expressions régulières, nous rencontrons souvent des situations dans lesquelles nous devons faire correspondre des caractères d'espacement non imprimables dans le texte original. Par exemple, nous pouvons avoir besoin de rechercher tous les caractères de tabulation ou de trouver des caractères de nouvelle ligne. De tels caractères sont difficiles à saisir directement dans une expression régulière. Dans ce cas, nous pouvons utiliser les éléments spéciaux répertoriés ci-dessous. :

b 回退(并删除)一个字符(Backspace键)
f 换页符
n 换行符
r 回车符
t 制表符(Tab键)
v 垂直制表符

Regardons un exemple pour supprimer les lignes vides du fichier :

Texte :

8 5 4 1 6 3 2 7 9
7 6 2 9 5 8 3 4 1
9 3 1 4 2 7 8 5 6

6 9 3 8 7 5 1 2 4
5 1 8 3 4 2 6 9 7
2 4 7 6 1 9 5 3 8

3 26 7 8 4 9 1 5
4 8 9 5 3 1 7 6 2
1 7 5 2 9 6 4 8 3

Expression régulière : rnrn

Analyse : rn correspond à une combinaison retour chariot + saut de ligne, qui est traitée comme du texte dans Windows système d'exploitation La balise de fin de la ligne. Une recherche utilisant l'expression régulière rnrn correspondra à deux balises de fin de ligne consécutives, qui se trouvent être des lignes vides.

Remarque : les systèmes d'exploitation Unix et Linux utilisent uniquement un caractère de nouvelle ligne pour terminer une ligne de texte. En d'autres termes, pour faire correspondre les lignes vides dans les systèmes Unix ou Linux, utilisez simplement nn, pas besoin d'en ajouter. r. L'expression régulière applicable à la fois à Windows et à Unix/Linux doit inclure un r facultatif et un n obligatoire, c'est-à-dire r?nr?n, qui sera abordé dans un article ultérieur.

Le code Java est le suivant :

public static void matchBlankLine() throws Exception{
  BufferedReader br = new BufferedReader(new FileReader(new File("E:/九宫格.txt")));
  StringBuilder sb = new StringBuilder();
  char[] cbuf = new char[1024];
  int len = 0;
  while(br.ready() && (len = br.read(cbuf)) > 0){
    br.read(cbuf);
    sb.append(cbuf, 0, len);
  }
  String reg = "\r\n\r\n";
  System.out.println("原内容:\n" + sb.toString());
  System.out.println("处理后:-----------------------------");
  System.out.println(sb.toString().replaceAll(reg, "\r\n"));
}

Les résultats d'exécution sont les suivants :

原内容:
8 5 4 1 6 3 2 7 9
7 6 2 9 5 8 3 4 1
9 3 1 4 2 7 8 5 6
6 9 3 8 7 5 1 2 4
5 1 8 3 4 2 6 9 7
2 4 7 6 1 9 5 3 8
3 2 6 7 8 4 9 1 5
4 8 9 5 3 1 7 6 2
1 7 5 2 9 6 4 8 3
 
处理后:-----------------------------
8 5 4 1 6 3 2 7 9
7 6 2 9 5 8 3 4 1
9 3 1 4 2 7 8 5 6
6 9 3 8 7 5 1 2 4
5 1 8 3 4 2 6 9 7
2 4 7 6 1 9 5 3 8
3 2 6 7 8 4 9 1 5
4 8 9 5 3 1 7 6 2
1 7 5 2 9 6 4 8 3

3.

Le jeu de caractères (correspondant à l'un de plusieurs caractères) est la forme de correspondance la plus courante, et certains jeux de caractères couramment utilisés peuvent être remplacés par des métacaractères spéciaux. Ces métacaractères correspondent à une certaine classe de caractères (métacaractères de classe). Les métacaractères de classe ne sont pas essentiels car vous pouvez faire correspondre une certaine classe de caractères en énumérant les caractères pertinents un par un ou en définissant un intervalle de caractères, mais en les utilisant, l'expression régulière construite est concis et facile à comprendre et est couramment utilisé dans des applications pratiques.

1. Faire correspondre les nombres et les non-numéros

d N'importe quel nombre, équivalent à [0-9] ou [0123456789]
D Tout non-nombre, équivalent à [^0-9] ou [^0123456789]

2. Faites correspondre les lettres et les chiffres avec les non-lettres et les chiffres

lettres (A-Z ne sont pas sensibles à la taille). ) (écrire), les chiffres et les traits de soulignement sont un ensemble de caractères couramment utilisés. Les métacaractères suivants peuvent être utilisés :

w Toute lettre (non sensible à la casse), les chiffres et les traits de soulignement, équivalents à [0-9a". -zA -Z_]
W Tout caractère non alphanumérique et trait de soulignement, équivalent à [^0-9a-zA-Z_]

3. Faire correspondre les caractères d'espacement et les caractères non-espaces .

s Tout caractère d'espace blanc est équivalent à [fnrtv]
S Tout caractère d'espace blanc est équivalent à [^fnrtv]

Remarque : il n'y a pas de métacaractère de retour arrière b qui ne soit pas dans s dans la plage.

4. Faire correspondre des valeurs hexadécimales ou octales

Hex : donné avec le préfixe x, par exemple : x0A correspond au caractère ASCII 10 (symbole de nouvelle ligne), son effet est équivalent à n.
Octal : utiliser le préfixe

Les caractères POSIX sont différents des métacaractères que nous avons vus auparavant. Regardons un exemple d'utilisation d'expressions régulières pour faire correspondre les couleurs dans les pages Web :

Texte : background-color:#3636FF;height:30px;width:60px;">Test

Expression régulière : #[[ :xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]]

Résultat :< ;span style="background-color:【#3636FF】;height:30px;width:60px;">Test

Remarque : le motif utilisé ici commence par [[ et se termine par ]], ce qui est nécessaire pour utiliser les classes de caractères POSIX. Les caractères POSIX doivent être placés entre [: et :]. Les caractères externes [et] sont utilisés pour définir un ensemble, les caractères internes [ et ] les caractères font partie de la classe de caractères POSIX elle-même.

La représentation des caractères POSIX en Java est différente. Elle n'est pas incluse entre [: et :], mais commence par p et est incluse entre { et }. Il y a une différence entre les majuscules et les minuscules, et at. en même temps, il augmente p{ASCII}, comme indiqué ci-dessous :

p{Alnum} 字母数字字符:[p{Alpha}p{Digit}]
p{Alpha} 字母字符:[p{Lower}p{Upper}]
p{ASCII} 所有 ASCII:[x00-x7F]
p{Blank} 空格或制表符:[ t]
p{Cntrl} 控制字符:[x00-x1Fx7F]
p{Digit} 十进制数字:[0-9]
p{Graph} 可见字符:[p{Alnum}p{Punct}]
p{Lower} 小写字母字符:[a-z]
p{Print} 可打印字符:[p{Graph}x20]
p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
p{Space} 空白字符:[ tnx0Bfr]
p{Upper} 大写字母字符:[A-Z]
p{XDigit} 十六进制数字:[0-9a-fA-F]

Je crois que vous maîtrisez la méthode après avoir lu le cas dans cet article .Pour des informations plus intéressantes, veuillez consulter le site Web chinois php Autres articles connexes !

Lecture recommandée :

Tutoriel de correspondance de position du didacticiel d'expression régulière (avec code)

Correction de la force du mot de passe JS Vérifier régulièrement expression (avec code)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn