Heim Backend-Entwicklung PHP-Tutorial Wie stimmen reguläre Ausdrucksmuster mit Zeichenfolgen überein?

Wie stimmen reguläre Ausdrucksmuster mit Zeichenfolgen überein?

Nov 30, 2017 am 09:14 AM
匹配 如何 表达式

正则表达式,又称规则表达式。计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。本文我们就和大家分享正则表达式模式匹配字符串的基础知识。

在实际项目中有个功能的实现需要解析一些特定模式的字符串。而在已有的代码库中,在已实现的部分功能中,都是使用检测特定的字符,使用这种方法的缺点是:

逻辑上很容易出错

很容易漏掉对一些边界条件的检查

代码复杂难以理解、维护

性能差

      看到代码库中有一个cpp,整个cpp两千多行代码,有个方法里,光解析字符串的就有400余行!一个个字符对比过去,真是不堪入目。而且上面很多注释都已经过期,很多代码的书写风格也各不相同,基本可以判断是过了很多人手的。  在这种情况下,基本没办法还沿着这条老路走下去,自然而然就想到了使用正则表达式。

这篇文章可以说是一个总结,把在书写正则表达式的匹配字符串方面的基础知识介绍一下。主要分为以下两个个部分:

匹配字符串的基本规则

正则匹配、查找与替代

本文介绍的正则表达式规则是ECMAScript。使用的编程语言是C++。其他方面的不做介绍。

匹配字符串的基本规则

1. 匹配固定的字符串

regex e("abc");
Nach dem Login kopieren

2. 匹配固定字符串,不区分大小写

regex e("abc", regex_constants::icase);
Nach dem Login kopieren

3. 匹配固定字符串之外多一个字符,不区分大小写

regex e("abc.", regex_constants::icase);  // .  Any character except 
newline. 1个字符
Nach dem Login kopieren

4. 匹配0个或1个字符

regex e("abc?");    // ?  Zero or 1 preceding character. 
匹配?前一个字符
Nach dem Login kopieren

5. 匹配0个或多个字符

regex e("abc*");    // *  Zero or more preceding character. 
匹配*前一个字符
Nach dem Login kopieren

6. 匹配1个或多个字符

regex e("abc+");    // +  One or more preceding character. 
匹配+前一个字符
Nach dem Login kopieren

7. 匹配特定字符串中的字符

regex e("ab[cd]*");    // [...] Any character inside square brackets. 
匹配[]内的任意字符
Nach dem Login kopieren

8. 匹配非特定字符串的字符

regex e("ab[^cd]*");    // [...] Any character not inside square 
brackets. 匹配非[]内的任意字符
Nach dem Login kopieren

9. 匹配特定字符串,且指定数量

regex e("ab[cd]{3}"); // {n} 匹配{}之前任意字符,且字符个数为3个

10. 匹配特定字符串,指定数量范围

regex e("ab[cd]{3,}");  // {n} 匹配{}之前任意字符,且字符个数为3个或3个以上
regex e("ab[cd]{3,5}");  // {n} 匹配{}之前任意字符,且字符个数为3个以上,5个以下闭区间
Nach dem Login kopieren


11. 匹配规则中的某一个规则

regex e("abc|de[fg]");    // |  匹配|两边的任意一个规则
Nach dem Login kopieren

12. 匹配分组

regex e("(abc)de+"); // () ()表示一个子分组

13. 匹配子分组

regex e("(abc)de+\\1");  // ()    ()表示一个子分组,而\1表示在此位置匹配第一个分组的内容
regex e("(abc)c(de+)\\2\\1");  // \2 表示的是在此匹配第二个分组的内容
Nach dem Login kopieren


14. 匹配某个字符串开头

regex e("^abc."); 
// ^ begin of the string 查找以abc开头的子字符串
Nach dem Login kopieren


15. 匹配某个字符串结尾

regex e("abc.$");
// $ end of the string 查找以abc结尾的子字符串
Nach dem Login kopieren


以上是最基本的匹配模式的书写。通常如果要匹配特定的字符,需要使用\进行转义,比如在匹配字符串中需要匹配".",那么在匹配字符串中应该在特定字符前加上\。出了以上的基本规则,如果还不满足特定的需要,那么可以参考此链接。使用了解基本的匹配模式后,需要使用正则表达式进行匹配、查找或者替代。

正则匹配、查找与替代

书写好模式字符串后,需要将待匹配的字符串和模式字符串进行一定规则的匹配。包括三种方式:匹配(regex_match)、查找(regex_search)、替换(regex_replace)。

匹配很简单,直接将待匹配字符串和模式字符串传入到regex_match中,返回一个bool量来指明待匹配的字符串是否满足模式字符串的规则。匹配整个str字符串。

bool match = regex_match(str, e);
// 匹配整个字符串str
Nach dem Login kopieren



查找是在整个字符串中找到和满足模式字符串的子字符串。也就是只要str中存在满足模式字符串就会返回true。

bool match = regex_search(str, e);
// 查找字符串str中匹配e规则的子字符串
Nach dem Login kopieren


但是很多情况下,光是返回一个是否匹配的bool量是不够的,我们需要拿到匹配的子字符串。那么就需要在模式字符串中将匹配字符串分组,参考【匹配字符串的基本规则】第12点。再将smatch传入到regex_search中,就可以获得满足每个子分组的字符串。

smatch m;
bool found = regex_search(str, m, e);
for (int n = 0; n < m.size(); ++n)
  {
    cout << "m[" << n << "].str()=" << m[n].str() << endl;
  }
Nach dem Login kopieren


替换也是基于模式字符串在分组情况下完成的。

cout << regex_replace(str, e, "$1 is on $2");
Nach dem Login kopieren


此时,会在满足分组1和分组2的字符串中间加上“ is on”。

以上三个函数有很多版本的重载,可以满足不同情况下的需求。

实战

要求:找出满足sectionA("sectionB")或者sectionA ("sectionB")的模式字符串。且分离出sectionA、sectionB。sectionA和sectionB不会出现数字,字符可大小写,至少有一个字符。

分析:根据要求,大致可分为两个部分,也就是sectionA和sectionaB。这是就需要用到分组。

第一步:写出满足section情况的模式字符串

[a-zA-Z]+

第二步:在sectionA和sectionB中可能会出现空格。暂且假设至多有1个空格

\\s?

将以上两个情况组合起来,也就是能满足我们需求的模式字符串。但是如何组织才能让其分为两组呢?

[a-zA-Z]+\\s[a-zA-Z]+

上面这种写法肯定不对的,根据分组规则,需要将分组以()进行区分

regex e("([a-zA-Z]+)\\s?\\(\"([a-zA-Z]+)\"\\)");

此时,在\\s?后面的\\(\"是为了满足sectionB外层的引号和括号进行的转义。

以上完成后,可先用regex_match进行匹配,如果匹配,那么继续使用regex_search对字符串进行查找

if (regex_match(str, e))
{
 smatch m;
 auto found = regex_search(str, m, e);
 for (int n = 0; n < m.size(); ++n)
 {
 cout << "m[" << n << "].str()=" << m[n].str() << endl;
 }
}
else
{
 cout << "Not matched" << endl;
}
Nach dem Login kopieren

对象m数组的第一个字符串是满足需求的整个子串,接下来才是满足分组1、分组2的子串。

以上内容就是正则表达式模式匹配字符串的基础知识,希望对大家有帮助。

相关推荐:

PHP正则表达式合集

php正则表达式中常用函数的详解

常用的正则表达式汇总

Das obige ist der detaillierte Inhalt vonWie stimmen reguläre Ausdrucksmuster mit Zeichenfolgen überein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Praktischer Leitfaden zu regulären Ausdrücken in Go: So passen Sie hexadezimale Farbcodes an Praktischer Leitfaden zu regulären Ausdrücken in Go: So passen Sie hexadezimale Farbcodes an Jul 13, 2023 am 10:46 AM

Go Language – Praktischer Leitfaden für reguläre Ausdrücke: So passen Sie hexadezimale Farbcodes an. Einführung: Reguläre Ausdrücke sind ein leistungsstarkes und flexibles Werkzeug zum Mustervergleich und zum Suchen von Zeichenfolgen. In der Go-Sprache können wir das integrierte reguläre Ausdruckspaket regexp verwenden, um diese Vorgänge zu implementieren. In diesem Artikel wird erläutert, wie Sie reguläre Ausdrücke verwenden, um hexadezimale Farbcodes in der Go-Sprache abzugleichen. Importieren des regulären Ausdruckspakets Zuerst müssen wir das reguläre Ausdruckspaket regexp der Go-Sprache importieren. Sie können die folgende Importanweisung am Anfang des Codes hinzufügen: i

Regulärer PHP-Ausdruck in Aktion: Zuordnung von Buchstaben und Zahlen Regulärer PHP-Ausdruck in Aktion: Zuordnung von Buchstaben und Zahlen Jun 22, 2023 pm 04:49 PM

PHP-Praxis für reguläre Ausdrücke: Abgleichen von Buchstaben und Zahlen Der reguläre Ausdruck ist ein Tool zum Abgleichen von Zeichenfolgen, mit dem die Suche, das Ersetzen, das Teilen und andere Vorgänge von Zeichenfolgen problemlos implementiert werden können. Auch in der PHP-Entwicklung sind reguläre Ausdrücke ein sehr nützliches Werkzeug. In diesem Artikel erfahren Sie, wie Sie reguläre PHP-Ausdrücke verwenden, um Buchstaben und Zahlen abzugleichen. Zuordnen eines einzelnen Zeichens Um ein einzelnes Zeichen abzugleichen, können Sie die Zeichenklassen in regulären Ausdrücken verwenden. Zeichenklassen werden durch eckige Klammern [] dargestellt. Die darin enthaltenen Zeichen stellen die Zeichen dar, die übereinstimmen können. Sie können Bindestriche verwenden, um Bereiche darzustellen.

Reguläre PHP-Ausdrücke: Exakte Übereinstimmung und Ausschluss von Fuzzy-Einschlüssen Reguläre PHP-Ausdrücke: Exakte Übereinstimmung und Ausschluss von Fuzzy-Einschlüssen Feb 28, 2024 pm 01:03 PM

Reguläre PHP-Ausdrücke: Exakte Übereinstimmung und Ausschluss. Reguläre Fuzzy-Inklusion-Ausdrücke sind ein leistungsstarkes Text-Matching-Tool, das Programmierern bei der effizienten Suche, Ersetzung und Filterung bei der Textverarbeitung helfen kann. In PHP werden reguläre Ausdrücke auch häufig zur Zeichenfolgenverarbeitung und zum Datenabgleich verwendet. Dieser Artikel konzentriert sich auf die Durchführung von exakten Übereinstimmungen und den Ausschluss von Fuzzy-Inklusion-Operationen in PHP und veranschaulicht dies anhand spezifischer Codebeispiele. Exakte Übereinstimmung Exakte Übereinstimmung bedeutet, dass nur Zeichenfolgen abgeglichen werden, die die genaue Bedingung erfüllen, keine Variationen oder zusätzlichen Wörter.

Tipps zum PHP-String-Matching: Vermeiden Sie mehrdeutige eingeschlossene Ausdrücke Tipps zum PHP-String-Matching: Vermeiden Sie mehrdeutige eingeschlossene Ausdrücke Feb 29, 2024 am 08:06 AM

Tipps zum PHP-String-Matching: Vermeiden Sie mehrdeutige eingeschlossene Ausdrücke. In der PHP-Entwicklung ist der String-Matching eine häufige Aufgabe, die normalerweise verwendet wird, um bestimmte Textinhalte zu finden oder das Eingabeformat zu überprüfen. Manchmal müssen wir jedoch die Verwendung mehrdeutiger Einschlussausdrücke vermeiden, um die Übereinstimmungsgenauigkeit sicherzustellen. In diesem Artikel werden einige Techniken zur Vermeidung mehrdeutiger Einschlussausdrücke beim String-Matching in PHP vorgestellt und spezifische Codebeispiele bereitgestellt. Verwenden Sie die Funktion preg_match() für den exakten Abgleich. In PHP können Sie preg_mat verwenden

So passen Sie in Jedi Submarine 2 zusammen So passen Sie in Jedi Submarine 2 zusammen Feb 27, 2024 pm 08:43 PM

Jedi Submarine 2 ist ein Third-Person-Shooter mit erstklassigem Gameplay, das es Freunden ermöglicht, den Spielspaß von Online-Shootern zu erleben Ich weiß immer noch nicht, wie man das Matching durchführt. In dieser Ausgabe werde ich das Matching-Vorgangs-Tutorial von Jedi Submarine 2 vorstellen. Antwort: Klicken Sie auf der Planetenoberfläche auf Quick Match. Die Matching-Methode von Jedi Submarine 2. Die schnelle Matching-Methode von Jedi Submarine 2 ist eine sehr gute Funktion. Sie kann Spielern dabei helfen, passende Teamkollegen zu finden, gemeinsam an einer Mission teilzunehmen und zusammenzuarbeiten, um eine höhere Missionsbewertung zu erhalten. Die Matching-Optionen finden Sie auf der Benutzeroberfläche des Planeten. Wenn Sie nach Aufgaben suchen oder öffentliche Räume ansehen, wird unten eine schnelle Übereinstimmung angezeigt. Wenn der Spieler das Cross-Leveling einschaltet

Gibt es eine Zukunft für eine Beschäftigung in der klinischen Pharmazie an der Harbin Medical University? (Wie sind die Beschäftigungsaussichten für die klinische Pharmazie an der Harbin Medical University?) Gibt es eine Zukunft für eine Beschäftigung in der klinischen Pharmazie an der Harbin Medical University? (Wie sind die Beschäftigungsaussichten für die klinische Pharmazie an der Harbin Medical University?) Jan 02, 2024 pm 08:54 PM

Wie sind die Beschäftigungsaussichten der klinischen Pharmazie an der Harbin Medical University? Obwohl die Beschäftigungssituation im Land nicht optimistisch ist, haben Absolventen der Pharmazie immer noch gute Beschäftigungsaussichten. Insgesamt ist das Angebot an Pharmaabsolventen geringer als die Nachfrage. Pharmaunternehmen und Pharmafabriken sind die Hauptkanäle für die Aufnahme solcher Absolventen. Auch die Nachfrage nach Talenten in der Pharmaindustrie wächst stetig. Berichten zufolge hat das Angebot-Nachfrage-Verhältnis für Doktoranden in den Hauptfächern Pharmazeutische Präparate und Naturmedizinische Chemie in den letzten Jahren sogar 1:10 erreicht. Beschäftigungsrichtung des Hauptfachs „Klinische Pharmazie“: Nach dem Abschluss können Studierende des Hauptfachs „Klinische Medizin“ in medizinischen und Gesundheitsabteilungen, in der medizinischen Forschung und anderen Abteilungen in der medizinischen Behandlung, Prävention, medizinischen Forschung usw. tätig werden. Beschäftigungspositionen: Medizinischer Vertreter, Pharma-Vertriebsmitarbeiter, Vertriebsmitarbeiter, Vertriebsleiter, Regionaler Vertriebsleiter, Investmentmanager, Produktmanager, Produktspezialist, Krankenpfleger

Wie behebt man Fehler in der Python-Ausdruckssyntax? Wie behebt man Fehler in der Python-Ausdruckssyntax? Jun 24, 2023 pm 05:04 PM

Python ist als High-Level-Programmiersprache einfach zu erlernen und zu verwenden. Sobald Sie ein Python-Programm schreiben müssen, werden Sie unweigerlich auf Syntaxfehler stoßen, und Fehler in der Ausdruckssyntax kommen häufig vor. In diesem Artikel besprechen wir, wie Fehler in der Ausdruckssyntax in Python behoben werden. Fehler in der Ausdruckssyntax gehören zu den häufigsten Fehlern in Python und werden normalerweise durch eine falsche Verwendung der Syntax oder das Fehlen notwendiger Komponenten verursacht. In Python bestehen Ausdrücke normalerweise aus Zahlen, Zeichenfolgen, Variablen und Operatoren. am häufigsten

Regulärer PHP-Ausdruck: So passen Sie alle Textarea-Tags in HTML an Regulärer PHP-Ausdruck: So passen Sie alle Textarea-Tags in HTML an Jun 22, 2023 pm 09:27 PM

HTML ist eine häufig verwendete Seitenauszeichnungssprache, die zum Anzeigen von Inhalten auf Webseiten verwendet wird. In HTML wird das Textarea-Tag zum Erstellen von Textfeldern verwendet, die es Benutzern ermöglichen, Text einzugeben oder zu bearbeiten. Wenn Sie alle Textarea-Tags und deren Inhalte von einer Seite extrahieren müssen, können reguläre PHP-Ausdrücke eine einfache und effektive Lösung bieten. In diesem Artikel erfahren Sie, wie Sie mithilfe regulärer PHP-Ausdrücke alle Textarea-Tags in HTML abgleichen. Verstehen Sie reguläre Tabellen

See all articles