Heim Backend-Entwicklung C#.Net-Tutorial Muster für reguläre Ausdrücke, das mit der Zeichenfolge „basics_regular expression' übereinstimmt

Muster für reguläre Ausdrücke, das mit der Zeichenfolge „basics_regular expression' übereinstimmt

Dec 16, 2017 am 11:32 AM
匹配 字符串 表达式

这篇文章主要介绍了正则表达式模式匹配字符串基础知识,分为匹配字符串的基本规则和正则匹配、查找与替代的知识,本文给大家介绍的非常不错,需要的朋友可以参考下

 介绍

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

  • 逻辑上很容易出错

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

  • 代码复杂难以理解、维护

  • 性能差

      看到代码库中有一个cpp,整个cpp两千多行代码,有个方法里,光解析字符串的就有400余行!一个个字符对比过去,真是不堪入目。而且上面很多注释都已经过期,很多代码的书写风格也各不相同,基本可以判断是过了很多人手的。

      在这种情况下,基本没办法还沿着这条老路走下去,自然而然就想到了使用正则表达式。而我自己在正则表达式方面没有实际应用的经验,尤其是对于书写匹配规则也是一知半解。第一时间就想到从网上找点资料,先大致了解下。但是度娘的结果依旧还是让人很失望。(当然,如果是想要查找一些比较专业的知识,度娘的结果每次都会让人心碎,无不都是千篇一律的拷贝。但是通常度娘生活方面的还是可以)后来就放弃度娘的查询结果,FQ到了外面去找,也找到了一些比较基础的视频(需FQ)。

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

  1. 匹配字符串的基本规则

  2. 正则匹配、查找与替代

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

匹配字符串的基本规则

1. 匹配固定的字符串

regex e("abc");

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

regex e("abc", regex_constants::icase);

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

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

4. 匹配0个或1个字符

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

5. 匹配0个或多个字符

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

6. 匹配1个或多个字符

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

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

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

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

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

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]"); // | 匹配|两边的任意一个规则

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中文网的支持!

相关推荐:

使用正则表达式验证登录页面输入是否符合要求_正则表达式

正则表达式 \w \d 的意义解答

使用正则表达式屏蔽关键字的方法

Das obige ist der detaillierte Inhalt vonMuster für reguläre Ausdrücke, das mit der Zeichenfolge „basics_regular expression' übereinstimmt. 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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen 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)

Detaillierte Erläuterung der Methode zum Konvertieren des Typs „int' in „string' in PHP Detaillierte Erläuterung der Methode zum Konvertieren des Typs „int' in „string' in PHP Mar 26, 2024 am 11:45 AM

Ausführliche Erläuterung der Methode zum Konvertieren des Typs int in einen String in PHP. Bei der PHP-Entwicklung stoßen wir häufig auf die Notwendigkeit, den Typ int in einen String-Typ zu konvertieren. Diese Konvertierung kann auf verschiedene Weise erreicht werden. In diesem Artikel werden verschiedene gängige Methoden im Detail vorgestellt, mit spezifischen Codebeispielen, um den Lesern das Verständnis zu erleichtern. 1. Verwenden Sie die integrierte Funktion strval() von PHP. PHP bietet eine integrierte Funktion strval(), die Variablen verschiedener Typen in String-Typen konvertieren kann. Wenn wir den Typ int in den Typ string konvertieren müssen,

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.

Wie kann man in Golang überprüfen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt? Wie kann man in Golang überprüfen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt? Mar 12, 2024 pm 09:42 PM

Wie kann man in Golang überprüfen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt? Beim Programmieren in Golang kommt es häufig vor, dass Sie prüfen müssen, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt. Um diese Anforderung zu erfüllen, können wir die vom Strings-Paket in Golang bereitgestellten Funktionen verwenden, um dies zu erreichen. Als Nächstes stellen wir anhand spezifischer Codebeispiele ausführlich vor, wie Sie mit Golang überprüfen können, ob eine Zeichenfolge mit einem bestimmten Zeichen beginnt. In Golang können wir HasPrefix aus dem Strings-Paket verwenden

So ermitteln Sie, ob eine Golang-Zeichenfolge mit einem bestimmten Zeichen endet So ermitteln Sie, ob eine Golang-Zeichenfolge mit einem bestimmten Zeichen endet Mar 12, 2024 pm 04:48 PM

Titel: So ermitteln Sie, ob eine Zeichenfolge in Golang mit einem bestimmten Zeichen endet. In der Go-Sprache müssen wir manchmal feststellen, ob eine Zeichenfolge mit einem bestimmten Zeichen endet. In diesem Artikel wird erläutert, wie Sie diese Funktion mithilfe der Go-Sprache implementieren, und es werden Codebeispiele als Referenz bereitgestellt. Schauen wir uns zunächst an, wie Sie in Golang feststellen können, ob eine Zeichenfolge mit einem bestimmten Zeichen endet. Die Zeichen in einer Zeichenfolge in Golang können durch Indizierung ermittelt werden, und die Länge der Zeichenfolge kann ermittelt werden

So wiederholen Sie eine Zeichenfolge in Python_Tutorial zum Wiederholen von Zeichenfolgen in Python So wiederholen Sie eine Zeichenfolge in Python_Tutorial zum Wiederholen von Zeichenfolgen in Python Apr 02, 2024 pm 03:58 PM

1. Öffnen Sie zuerst Pycharm und rufen Sie die Pycharm-Homepage auf. 2. Erstellen Sie dann ein neues Python-Skript, klicken Sie mit der rechten Maustaste – klicken Sie auf „Neu“ – klicken Sie auf „Pythondatei“. 3. Geben Sie eine Zeichenfolge ein, Code: s="-". 4. Dann müssen Sie die Symbole in der Zeichenfolge 20 Mal wiederholen, Code: s1=s*20 5. Geben Sie den Druckausgabecode ein, Code: print(s1). 6. Führen Sie abschließend das Skript aus und Sie sehen unten unseren Rückgabewert: - 20 Mal wiederholt.

So lösen Sie das Problem verstümmelter chinesischer Zeichen bei der Konvertierung von Hexadezimalzahlen in Zeichenfolgen in PHP So lösen Sie das Problem verstümmelter chinesischer Zeichen bei der Konvertierung von Hexadezimalzahlen in Zeichenfolgen in PHP Mar 04, 2024 am 09:36 AM

Methoden zur Lösung des Problems verstümmelter chinesischer Zeichen beim Konvertieren von Hexadezimalzeichenfolgen in PHP. Bei der PHP-Programmierung stoßen wir manchmal auf Situationen, in denen wir Hexadezimalzeichenfolgen in normale chinesische Zeichen konvertieren müssen. Bei dieser Konvertierung treten jedoch manchmal Probleme mit verstümmelten chinesischen Zeichen auf. In diesem Artikel finden Sie eine Methode zur Lösung des Problems verstümmelter chinesischer Zeichen bei der Konvertierung von Hexadezimalzahlen in Zeichenfolgen in PHP sowie spezifische Codebeispiele. Verwenden Sie die Funktion hex2bin() für die Hexadezimalkonvertierung. Die in PHP integrierte Funktion hex2bin() kann 1 konvertieren

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

PHP-String-Manipulation: eine praktische Möglichkeit, Leerzeichen effektiv zu entfernen PHP-String-Manipulation: eine praktische Möglichkeit, Leerzeichen effektiv zu entfernen Mar 24, 2024 am 11:45 AM

PHP-String-Operation: Eine praktische Methode zum effektiven Entfernen von Leerzeichen Bei der PHP-Entwicklung kommt es häufig vor, dass Sie Leerzeichen aus einem String entfernen müssen. Das Entfernen von Leerzeichen kann die Zeichenfolge sauberer machen und die nachfolgende Datenverarbeitung und -anzeige erleichtern. In diesem Artikel werden mehrere effektive und praktische Methoden zum Entfernen von Leerzeichen vorgestellt und spezifische Codebeispiele angehängt. Methode 1: Verwenden Sie die in PHP integrierte Funktion trim(). Die in PHP integrierte Funktion trim() kann Leerzeichen an beiden Enden der Zeichenfolge entfernen (einschließlich Leerzeichen, Tabulatoren, Zeilenumbrüche usw.), was sehr praktisch und einfach ist benutzen.

See all articles