Heim Backend-Entwicklung PHP-Tutorial PHP正则表达式 不擒获

PHP正则表达式 不擒获

Jun 13, 2016 am 11:02 AM
exp gt lt name word

PHP正则表达式 不捕获
来源:http://www.iq662.com
替换

好了,现在终于到了解决3位或4位区号问题的时间了。正则表达式里的替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。听不明白?没关系,看例子:

0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用替换|把这个表达式扩展成也支持4位区号的。

\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用替换时,顺序是很重要的。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配替换时,将会从左到右地测试每个条件,如果满足了某个条件的话,就不会去管其它的替换条件了。

Windows98|Windows2000|WindosXP这个例子是为了告诉你替换不仅仅能用于两种规则,也能用于更多种规则。

分组

我们已经提到了怎么重复单个字符;但如果想要重复一个字符串又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作(教程后面会有介绍)。

(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}代表1到3位的数字,(\d{1,3}\.}{3}代表三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。

不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址(IP地址中每个数字都不能大于255)。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。

理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?,这里我就不细说了,你自己应该能分析得出来它的意义。

后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:以分组的左括号为标志,从左向右,第一个分组的组号为1,第二个为2,以此类推。

后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。难以理解?请看示例:

\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, kitty kitty。首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),然后是1个或几个空白符(\s+,最后是前面匹配的那个单词(\1)。

你也可以自己指定子表达式的组号或组名。要指定一个子表达式的组名,请使用这样的语法:(?\w+),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k,所以上一个例子也可以写成这样:\b(?\w+)\b\s*\k\b。

使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些:

表4.分组语法 捕获
(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里
(?:exp) 匹配exp,不捕获匹配的文本
位置指定
(?=exp) 匹配exp前面的位置
(?(?!exp) 匹配后面跟的不是exp的位置
(?注释
(?#comment) 这种类型的组不对正则表达式的处理产生任何影响,只是为了提供让人阅读注释


我们已经讨论了前两种语法。第三个(?:exp)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面。

位置指定

接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们用于指定一个位置,就像\b,^,$那样,因此它们也被称为零宽断言。最好还是拿例子来说明吧:

(?=exp)也叫零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如果在查找I'm singing while you're dancing.时,它会匹配sing和danc。

(?
假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:((?
下面这个例子同时使用了前缀和后缀:(?
负向位置指定

前面我们提到过怎么查找不是某个字符或不在某个字符类里的字符的方法(反义)。但是如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总是匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w+\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting。负向位置指定能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。现在,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。

零宽负向先行断言(?!exp),只会匹配后缀exp不存在的位置。\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字。

同理,我们可以用(?
一个更复杂的例子:(?).*(?=)匹配不包含属性的简单HTML标签内里的内容。((\w+)>)指定了这样的前缀:被尖括号括起来的单词(比如可能是),然后是.*(任意的字符串),最后是一个后缀(?=)。注意后缀里的\/,它用到了前面提过的字符转义;\1则是一个反向引用,引用的正是捕获的第一组,前面的(\w+)匹配的内容,这样如果前缀实际上是的话,后缀就是了。整个表达式匹配的是之间的内容(再次提醒,不包括前缀和后缀本身)。

注释

小括号的另一种用途是能过语法(?#comment)来包含注释。要包含注释的话,最好是启用“忽略模式里的空白符”选项,这样在编写表达式时能任意的添加空格,Tab,换行,而实际使用时这些都将被忽略。启用这个选项后,在#后面到这一行结束的所有文本都将被当成注释忽略掉。例如,我们可以把上一个表达式写成这样:

(? # 查找尖括号括起来的字母或数字(标签) ) # 前缀结束 .* # 匹配任意文本 (?= # 查找后缀,但不包含它 # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签 ) # 后缀结束

贪婪与懒惰

当正则表达式中包含能接受重复的量词(指定数量的代码,例如*,{5,12}等)时,通常的行为是匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的量词都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。

表5.懒惰量词 *? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复


还有些什么东西没提到

我已经描述了构造正则表达式的大量元素,还有一些我没有提到的东西。下面是未提到的元素的列表,包含语法和简单的说明。你可以在网上找到更详细的参考资料来学习它们--当你需要用到它们的时候。如果你安装了MSDN Library,你也可以在里面找到关于.net下正则表达式详细的文档。

表6.尚未讨论的语法 \a 报警字符(打印它的效果是电脑嘀一声)
\b 通常是单词分界位置,但如果在字符类里使用代表退格
\t 制表符,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式
(?-exp) 平衡组
(?-exp) 平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式后面的部分改变处理选项
(?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
(?(exp)yes) 同上,只是使用空表达式作为no
(?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no


一些我认为你可能已经知道的术语的参考


字符
程序处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。
字符串
0个或更多个字符的序列。
文本
文字,字符串。
匹配
符合规则,检验是否符合规则,符合规则的部分。

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 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)

Heiße Themen

Java-Tutorial
1665
14
PHP-Tutorial
1269
29
C#-Tutorial
1249
24
So deaktivieren Sie den automatischen Zeilenumbruch in Word So deaktivieren Sie den automatischen Zeilenumbruch in Word Mar 19, 2024 pm 10:16 PM

Beim Bearbeiten von Inhalten in einem Word-Dokument werden Zeilen möglicherweise automatisch umgebrochen. Wenn zu diesem Zeitpunkt keine Anpassung vorgenommen wird, hat dies große Auswirkungen auf unsere Bearbeitung und bereitet den Leuten große Kopfschmerzen. Tatsächlich handelt es sich um ein Problem mit dem Lineal. Im Folgenden werde ich die Lösung zum Aufheben des automatischen Zeilenumbruchs in Word vorstellen. Nachdem Sie ein Word-Dokument geöffnet und Text eingegeben haben, springt der Text beim Kopieren und Einfügen möglicherweise in eine neue Zeile. In diesem Fall müssen Sie die Einstellungen anpassen, um dieses Problem zu lösen. 2. Um dieses Problem zu lösen, müssen wir zunächst die Ursache dieses Problems kennen. Zu diesem Zeitpunkt klicken wir in der Symbolleiste auf „Ansicht“. 3. Klicken Sie dann unten auf die Option „Lineal“. 4. Zu diesem Zeitpunkt werden wir feststellen, dass über dem Dokument ein Lineal mit mehreren konischen Markierungen darauf erscheint.

Ausführliche Erklärung zur Anzeige des Lineals in Word und zur Bedienung des Lineals! Ausführliche Erklärung zur Anzeige des Lineals in Word und zur Bedienung des Lineals! Mar 20, 2024 am 10:46 AM

Wenn wir Word verwenden, verwenden wir oft Lineale, um den Inhalt schöner zu bearbeiten. Sie sollten wissen, dass zu den Linealen in Word horizontale und vertikale Lineale gehören, mit denen Sie die Seitenränder, Absatzeinzüge, Tabulatoren usw. des Dokuments anzeigen und anpassen können. Wie zeigt man also das Lineal in Word an? Als Nächstes zeige ich Ihnen, wie Sie die Linealanzeige einstellen. Studierende in Not sollten es schnell abholen! Die Schritte sind wie folgt: 1. Zuerst müssen wir das Word-Lineal aufrufen. Das Standard-Word-Dokument zeigt das Word-Lineal nicht an. Wir müssen nur auf die Schaltfläche [Ansicht] in Word klicken. 2. Dann finden wir die Option [Lineal] und überprüfen sie. Auf diese Weise können wir das Wortlineal anpassen! ja oder nein

So fügen Sie einem Word-Dokument eine handschriftliche Unterschrift hinzu So fügen Sie einem Word-Dokument eine handschriftliche Unterschrift hinzu Mar 20, 2024 pm 08:56 PM

Word-Dokumente sind aufgrund ihrer leistungsstarken Funktionen weit verbreitet und können nicht nur verschiedene Formate wie Bilder und Tabellen usw. in Word einfügen, sondern für die Integrität und Authentizität der Dateien erfordern viele Dateien am Ende eine manuelle Signatur des Dokuments. Es klingt wie folgt: Wie löst man komplexe Probleme? Heute werde ich Ihnen beibringen, wie man einem Word-Dokument eine handschriftliche Unterschrift hinzufügt. Scannen oder fotografieren Sie die handschriftliche Unterschrift mit einem Scanner, einer Kamera oder einem Mobiltelefon und nehmen Sie dann mit PS oder einer anderen Bildbearbeitungssoftware den erforderlichen Zuschnitt am Bild vor. 2. Wählen Sie „Einfügen – Bild – Aus Datei“ im Word-Dokument an der Stelle, an der Sie die handschriftliche Unterschrift einfügen möchten, und wählen Sie die zugeschnittene handschriftliche Unterschrift aus. 3. Doppelklicken Sie auf das Bild der handschriftlichen Unterschrift (oder klicken Sie mit der rechten Maustaste auf das Bild und wählen Sie „Bildformat festlegen“). Daraufhin wird „Bildformat festlegen“ angezeigt.

So legen Sie Seitenränder für Word fest So legen Sie Seitenränder für Word fest Mar 19, 2024 pm 10:00 PM

Unter den Bürosoftwares ist Word eine unserer am häufigsten verwendeten Software. Die von uns erstellten Textdokumente müssen bei Bedarf in Papierform eingereicht werden. Vor dem Drucken muss das Layout festgelegt werden . bessere Ergebnisse erzielen. Die Frage ist also: Wie legt man Seitenränder in Word fest? Wir haben spezifische Kurserklärungen, die Ihnen helfen, Ihre Zweifel auszuräumen. 1. Öffnen oder erstellen Sie ein neues Word-Dokument und klicken Sie in der Menüleiste auf das Menü „Seitenlayout“. 2. Klicken Sie auf die Schaltfläche „Ränder“ der Option „Seite einrichten“. 3. Wählen Sie in der Liste einen häufig verwendeten Seitenrand aus. 4. Wenn in der Liste keine passenden Ränder vorhanden sind, klicken Sie auf „Benutzerdefinierte Ränder“. 5. Das Dialogfeld „Seite einrichten“ wird angezeigt. Geben Sie jeweils die Option „Ränder“ ein.

Wo ist die Schattierungseinstellung in Word? Wo ist die Schattierungseinstellung in Word? Mar 20, 2024 am 08:16 AM

Wir verwenden oft Word für Büroarbeiten, aber wissen Sie, wo sich die Schattierungseinstellungen in Word befinden? Heute werde ich Ihnen die spezifischen Operationsschritte mitteilen, schauen Sie sich das an, Freunde! 1. Öffnen Sie zunächst das Word-Dokument, wählen Sie einen Absatz mit Textabsatzinformationen aus, der mit einer Schattierung hinzugefügt werden soll, klicken Sie dann auf die Schaltfläche [Start] in der Symbolleiste, suchen Sie den Absatzbereich und klicken Sie auf die Dropdown-Schaltfläche rechts (wie im roten Kreis in der Abbildung unten dargestellt) ). 2. Nachdem Sie auf die Dropdown-Box-Schaltfläche geklickt haben, klicken Sie in den Optionen des Popup-Menüs auf die Option [Rand und Schattierung] (wie im roten Kreis in der Abbildung unten dargestellt). 3. Klicken Sie im Popup-Dialogfeld [Rand und Schattierung] auf die Option [Schattierung] (wie im roten Kreis in der Abbildung unten dargestellt). 4. Wählen Sie in der gefüllten Spalte eine Farbe aus

So zeichnen Sie eine Tabelle in Word So zeichnen Sie eine Tabelle in Word Mar 19, 2024 pm 11:50 PM

Word ist eine sehr leistungsfähige Office-Software. Word bietet im Vergleich zu WPS mehr Vorteile bei der Detailverarbeitung. Insbesondere wenn die Dokumentbeschreibung zu komplex ist, ist die Verwendung von Word in der Regel problemloser. Wenn Sie der Gesellschaft beitreten, müssen Sie daher einige Tipps zur Verwendung von Wörtern lernen. Vor einiger Zeit hat mir mein Cousin eine solche Frage gestellt. Ich sehe oft, wie andere Leute Tabellen zeichnen, wenn sie Word verwenden, und ich fühle mich auf einem sehr hohen Niveau. Ich habe damals gelacht, es schien ein hochrangiger Inhalt zu sein, aber tatsächlich waren nur drei Schritte erforderlich, um zu funktionieren. Wissen Sie, wie man eine Tabelle in Word zeichnet? 1. Öffnen Sie Word, wählen Sie die Stelle aus, an der Sie die Tabelle einfügen möchten, und suchen Sie in der oberen Menüleiste nach der Option „Einfügen“. 2. Klicken Sie auf die Option „Tabelle“ und es erscheinen dicht gepackte kleine Würfel.

So zeichnen Sie eine gepunktete Linie in Word So zeichnen Sie eine gepunktete Linie in Word Mar 19, 2024 pm 10:25 PM

Word ist eine Software, die wir häufig in unserem Büro verwenden. Sie verfügt über viele Funktionen, die uns die Arbeit erleichtern können. Bei einem großen Artikel können wir beispielsweise die darin enthaltene Suchfunktion verwenden, um herauszufinden, dass ein bestimmtes Wort im Volltext falsch ist , damit wir es direkt ersetzen können. Wenn Sie das Dokument an Ihre Vorgesetzten senden, können Sie das Dokument verschönern, damit es besser aussieht usw. Nachfolgend wird Ihnen der Herausgeber die Schritte zum Zeichnen mitteilen Gepunktete Linie in Word. Lasst uns gemeinsam lernen! 1. Zuerst öffnen wir das Word-Dokument auf dem Computer, wie in der Abbildung unten gezeigt: 2. Geben Sie dann eine Textzeichenfolge in das Dokument ein, wie im roten Kreis in der Abbildung unten gezeigt: 3. Drücken Sie anschließend und Halten Sie [Strg+A] gedrückt. Wählen Sie den gesamten Text aus, wie im roten Kreis in der Abbildung unten dargestellt: 4. Klicken Sie oben in der Menüleiste auf [Start].

Spezifische Schritte zum Löschen des Abwärtspfeils in Word! Spezifische Schritte zum Löschen des Abwärtspfeils in Word! Mar 19, 2024 pm 08:50 PM

Wenn Sie im Büroalltag einen Text von einer Website kopieren und direkt in Word einfügen, sehen Sie häufig einen [Abwärtspfeil], der durch Auswählen gelöscht werden kann, wenn es jedoch zu viele sind solche Symbole. Gibt es also eine schnelle Möglichkeit, alle Pfeile zu löschen? Deshalb werde ich Ihnen heute die spezifischen Schritte zum Löschen des Abwärtspfeils in Word mitteilen! Zunächst einmal steht der [Abwärtspfeil] in Word tatsächlich für [Manueller Zeilenumbruch]. Wir können alle [Abwärtspfeile] durch [Absatzmarkierung]-Symbole ersetzen, wie in der Abbildung unten gezeigt. 2. Dann wählen wir die Option [Suchen und Ersetzen] in der Menüleiste (wie im roten Kreis in der Abbildung unten dargestellt). 3. Klicken Sie dann auf den Befehl [Ersetzen]. Es erscheint ein Popup-Fenster. Klicken Sie auf [Sondersymbole].

See all articles