'十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器'

"
"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式sales.可以找出所有以字符串sales 起始,後跟另外一個字符的文件名。9 個文件裡有3 個與該模式(pattern)匹配。

提示:人們常用術語模式表示實際的正則表達式。

.字符可以匹配任意單個字符、字母、數字甚至是 .字符本身:

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式sales.可以找出所有以字符串sales 起始,後跟另外一個字符的文件名。9 個文件裡有3 個與該模式(pattern)匹配。

提示:人們常用術語模式表示實際的正則表達式。

.字符可以匹配任意單個字符、字母、數字甚至是 .字符本身:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這個例子比上一個多了一個sales.xls 文件。因為.能夠匹配任意單個字符,所以模式sales.也匹配該文件。

在同一個正則表達式裡允許使用多個.字符,它們既可以共同出現(一個接著一個——..將匹配連續的任意兩個字符),也可以分別出現在模式的不同位置。

我們再來看一個使用了相同原始文本的例子:把以na(North America)或sa(South America)開頭的文件(不管它們後面跟著什麼數字)找出來。

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式sales.可以找出所有以字符串sales 起始,後跟另外一個字符的文件名。9 個文件裡有3 個與該模式(pattern)匹配。

提示:人們常用術語模式表示實際的正則表達式。

.字符可以匹配任意單個字符、字母、數字甚至是 .字符本身:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這個例子比上一個多了一個sales.xls 文件。因為.能夠匹配任意單個字符,所以模式sales.也匹配該文件。

在同一個正則表達式裡允許使用多個.字符,它們既可以共同出現(一個接著一個——..將匹配連續的任意兩個字符),也可以分別出現在模式的不同位置。

我們再來看一個使用了相同原始文本的例子:把以na(North America)或sa(South America)開頭的文件(不管它們後面跟著什麼數字)找出來。

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式.a.把na1、na2 和sa1 找了出來,但它同時還找到了4個預料之外的匹配結果。為什麼會這樣?因為只要有任意3 個字符且中間那個字符是a,該模式就能夠匹配。

我們真正需要的是後面再緊跟著一個英文句號的.a.的模式。再來試一次:

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式sales.可以找出所有以字符串sales 起始,後跟另外一個字符的文件名。9 個文件裡有3 個與該模式(pattern)匹配。

提示:人們常用術語模式表示實際的正則表達式。

.字符可以匹配任意單個字符、字母、數字甚至是 .字符本身:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這個例子比上一個多了一個sales.xls 文件。因為.能夠匹配任意單個字符,所以模式sales.也匹配該文件。

在同一個正則表達式裡允許使用多個.字符,它們既可以共同出現(一個接著一個——..將匹配連續的任意兩個字符),也可以分別出現在模式的不同位置。

我們再來看一個使用了相同原始文本的例子:把以na(North America)或sa(South America)開頭的文件(不管它們後面跟著什麼數字)找出來。

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式.a.把na1、na2 和sa1 找了出來,但它同時還找到了4個預料之外的匹配結果。為什麼會這樣?因為只要有任意3 個字符且中間那個字符是a,該模式就能夠匹配。

我們真正需要的是後面再緊跟著一個英文句號的.a.的模式。再來試一次:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

.a..並不比.a.好多少,新增加的.將匹配任何一個多出來的字符(不管它是什麼)。既然.是一個能夠與任意單個字符相匹配的特殊字符,怎樣才能搜索.本身呢?

.字符在正則表達式裡有著特殊的含義。如果模式裡需要一個.,就要想辦法來告訴正則表達式你需要的是.字符本身而不是它在正則表達式裡的特殊含義。為此,你必須在.的前面加上一個\\(反斜槓)字符來對它進行轉義。\\是一個元字符(metacharacter,表示“這個字符有特殊含義,代表的不是字符本身”)。因此,.表示匹配任意單個字符,\\.表示匹配.字符本身。

再來驗證一次剛才的例子,這次我們使用了\\對.進行轉義:

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式sales.可以找出所有以字符串sales 起始,後跟另外一個字符的文件名。9 個文件裡有3 個與該模式(pattern)匹配。

提示:人們常用術語模式表示實際的正則表達式。

.字符可以匹配任意單個字符、字母、數字甚至是 .字符本身:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這個例子比上一個多了一個sales.xls 文件。因為.能夠匹配任意單個字符,所以模式sales.也匹配該文件。

在同一個正則表達式裡允許使用多個.字符,它們既可以共同出現(一個接著一個——..將匹配連續的任意兩個字符),也可以分別出現在模式的不同位置。

我們再來看一個使用了相同原始文本的例子:把以na(North America)或sa(South America)開頭的文件(不管它們後面跟著什麼數字)找出來。

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式.a.把na1、na2 和sa1 找了出來,但它同時還找到了4個預料之外的匹配結果。為什麼會這樣?因為只要有任意3 個字符且中間那個字符是a,該模式就能夠匹配。

我們真正需要的是後面再緊跟著一個英文句號的.a.的模式。再來試一次:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

.a..並不比.a.好多少,新增加的.將匹配任何一個多出來的字符(不管它是什麼)。既然.是一個能夠與任意單個字符相匹配的特殊字符,怎樣才能搜索.本身呢?

.字符在正則表達式裡有著特殊的含義。如果模式裡需要一個.,就要想辦法來告訴正則表達式你需要的是.字符本身而不是它在正則表達式裡的特殊含義。為此,你必須在.的前面加上一個\\(反斜槓)字符來對它進行轉義。\\是一個元字符(metacharacter,表示“這個字符有特殊含義,代表的不是字符本身”)。因此,.表示匹配任意單個字符,\\.表示匹配.字符本身。

再來驗證一次剛才的例子,這次我們使用了\\對.進行轉義:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

.a.\\.解決了問題。第一個.匹配n(在前兩個匹配結果裡)或s(在第三個匹配結果裡),第二個.匹配1(在第一個和第三個匹配結果裡)或2(在第二個匹配結果裡)。接下來,\\.匹配了分隔文件名與擴展名的字符.本身。

這個例子可以進一步改進:在模式中加入xls,避免匹配到像sa3.doc這樣的文件名,就像下面這樣:

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式sales.可以找出所有以字符串sales 起始,後跟另外一個字符的文件名。9 個文件裡有3 個與該模式(pattern)匹配。

提示:人們常用術語模式表示實際的正則表達式。

.字符可以匹配任意單個字符、字母、數字甚至是 .字符本身:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這個例子比上一個多了一個sales.xls 文件。因為.能夠匹配任意單個字符,所以模式sales.也匹配該文件。

在同一個正則表達式裡允許使用多個.字符,它們既可以共同出現(一個接著一個——..將匹配連續的任意兩個字符),也可以分別出現在模式的不同位置。

我們再來看一個使用了相同原始文本的例子:把以na(North America)或sa(South America)開頭的文件(不管它們後面跟著什麼數字)找出來。

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式.a.把na1、na2 和sa1 找了出來,但它同時還找到了4個預料之外的匹配結果。為什麼會這樣?因為只要有任意3 個字符且中間那個字符是a,該模式就能夠匹配。

我們真正需要的是後面再緊跟著一個英文句號的.a.的模式。再來試一次:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

.a..並不比.a.好多少,新增加的.將匹配任何一個多出來的字符(不管它是什麼)。既然.是一個能夠與任意單個字符相匹配的特殊字符,怎樣才能搜索.本身呢?

.字符在正則表達式裡有著特殊的含義。如果模式裡需要一個.,就要想辦法來告訴正則表達式你需要的是.字符本身而不是它在正則表達式裡的特殊含義。為此,你必須在.的前面加上一個\\(反斜槓)字符來對它進行轉義。\\是一個元字符(metacharacter,表示“這個字符有特殊含義,代表的不是字符本身”)。因此,.表示匹配任意單個字符,\\.表示匹配.字符本身。

再來驗證一次剛才的例子,這次我們使用了\\對.進行轉義:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

.a.\\.解決了問題。第一個.匹配n(在前兩個匹配結果裡)或s(在第三個匹配結果裡),第二個.匹配1(在第一個和第三個匹配結果裡)或2(在第二個匹配結果裡)。接下來,\\.匹配了分隔文件名與擴展名的字符.本身。

這個例子可以進一步改進:在模式中加入xls,避免匹配到像sa3.doc這樣的文件名,就像下面這樣:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

在正則表達式裡,\\字符總是出現在具有特殊含義字符序列的開頭,這個序列可以由一個或多個字符構成。

注意:如果需要搜索\\本身,就必須對\\字符進行轉義。相應的轉義序列是兩個連續的反斜槓字符\\\\。

小結

正則表達式,也被稱為模式,其實是一些由字符構成的字符串。這些字符可以是字面字符(普通文本)或元字符(有特殊含義的字符)。本文,我們介紹瞭如何使用普通文本和元字符去匹配單個字符。.可以匹配任意單個字符。\\用來對字符進行轉義。在正則表達式裡,有特殊含義的字符序列總是以\\字符開頭。

——

本文刪減自《正則表達式必知必會(修訂版)》,豆瓣評分9.2

"
十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

什麼是正則表達式

正則表達式是一種工具,和其他工具一樣,它是人們為了解決特定的問題而發明的,主要有兩種用途:

  • 一種是查找特定的信息(搜索)
  • 另一種是查找並編輯特定的信息(替換)

它是文本處理方面功能最強大的工具之一。

正則表達式表現形式

正則表達式通常是一些由文本和特殊指令構成的高度簡練的字符串,比如下面這幾個,它們都是合法的正則表達式(後面會解釋它們的用途):

Ben
.
www\\.forta\\.com
[a-zA-Z0-9_.]*
<[Hh]1>.*</[Hh]1>
\\r\\n\\r\\n
\\d{3,3}-\\d{3,3}-\\d{4,4}

正則表達式實現原理

正則表達式是用正則表達式語言創建的,與其他程序設計語言一樣,正則表達式語言也有必須要學習的特殊語法和指令,這正是本文要教給大家的東西,下面我們一起來實踐一下吧。

正則表達式語言並不是一種完備的程序設計語言,它甚至算不上是一種能夠直接安裝並運行的程序或實用工具。更準確地說,正則表達式語言是內置於其他語言或軟件產品裡的“迷你”語言。好在現在幾乎所有的語言或工具都支持正則表達式。

一、匹配單個字符

1.匹配純文本

Ben 是一個正則表達式。因為本身是普通文本(plain text),所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含普通文本(甚至可以只包含普通文本)。當然,這種正則表達式純粹就是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這裡使用的是普通文本正則表達式,它將匹配原始文本里的Ben。

正則表達式是區分字母大小寫的,所以Ben 不匹配ben。不過,絕大多數正則表達式的實現也支持不區分字母大小寫的匹配操作。比如說,JavaScript 用戶可以用i 標誌來強制執行不區分字母大小寫的搜索。

再來看一個例子,它使用了與剛才相同的原始文本和另外一個正則表達式:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

my 也是靜態文本,它在原始文本里找到了兩個匹配結果。

絕大多數正則表達式引擎的默認行為是隻返回第一個匹配結果。具體到上面那個例子,原始文本里的第一個my 通常是一個匹配結果,但第二個往往不是。

怎樣才能把兩個或更多個匹配結果都找出來呢?絕大多數正則表達式的實現都提供了一種能夠獲得所有匹配結果的機制(通常以數組或是其他的特殊格式形式返回)。比如說,在JavaScript 裡,可選的g(global,全局)標誌將返回一個包含所有匹配結果的數組。

2.匹配任意字符

前面見到的正則表達式匹配的都是靜態文本,根本體現不出正則表達式的威力。下面,我們一起來看看如何使用正則表達式去匹配不可預知的字符。

在正則表達式裡,特殊字符(或字符集合)用來標示要搜索的東西。.字符(英文句號)可以匹配任意單個字符。

提示:在絕大多數的正則表達式實現裡,.就不能匹配換行符。

於是,正則表達式c.t 可以匹配到cat 和cot(還有一些毫無意義的單詞)。

來看一個例子:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式sales.可以找出所有以字符串sales 起始,後跟另外一個字符的文件名。9 個文件裡有3 個與該模式(pattern)匹配。

提示:人們常用術語模式表示實際的正則表達式。

.字符可以匹配任意單個字符、字母、數字甚至是 .字符本身:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

這個例子比上一個多了一個sales.xls 文件。因為.能夠匹配任意單個字符,所以模式sales.也匹配該文件。

在同一個正則表達式裡允許使用多個.字符,它們既可以共同出現(一個接著一個——..將匹配連續的任意兩個字符),也可以分別出現在模式的不同位置。

我們再來看一個使用了相同原始文本的例子:把以na(North America)或sa(South America)開頭的文件(不管它們後面跟著什麼數字)找出來。

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

正則表達式.a.把na1、na2 和sa1 找了出來,但它同時還找到了4個預料之外的匹配結果。為什麼會這樣?因為只要有任意3 個字符且中間那個字符是a,該模式就能夠匹配。

我們真正需要的是後面再緊跟著一個英文句號的.a.的模式。再來試一次:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

.a..並不比.a.好多少,新增加的.將匹配任何一個多出來的字符(不管它是什麼)。既然.是一個能夠與任意單個字符相匹配的特殊字符,怎樣才能搜索.本身呢?

.字符在正則表達式裡有著特殊的含義。如果模式裡需要一個.,就要想辦法來告訴正則表達式你需要的是.字符本身而不是它在正則表達式裡的特殊含義。為此,你必須在.的前面加上一個\\(反斜槓)字符來對它進行轉義。\\是一個元字符(metacharacter,表示“這個字符有特殊含義,代表的不是字符本身”)。因此,.表示匹配任意單個字符,\\.表示匹配.字符本身。

再來驗證一次剛才的例子,這次我們使用了\\對.進行轉義:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

分析

.a.\\.解決了問題。第一個.匹配n(在前兩個匹配結果裡)或s(在第三個匹配結果裡),第二個.匹配1(在第一個和第三個匹配結果裡)或2(在第二個匹配結果裡)。接下來,\\.匹配了分隔文件名與擴展名的字符.本身。

這個例子可以進一步改進:在模式中加入xls,避免匹配到像sa3.doc這樣的文件名,就像下面這樣:

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

在正則表達式裡,\\字符總是出現在具有特殊含義字符序列的開頭,這個序列可以由一個或多個字符構成。

注意:如果需要搜索\\本身,就必須對\\字符進行轉義。相應的轉義序列是兩個連續的反斜槓字符\\\\。

小結

正則表達式,也被稱為模式,其實是一些由字符構成的字符串。這些字符可以是字面字符(普通文本)或元字符(有特殊含義的字符)。本文,我們介紹瞭如何使用普通文本和元字符去匹配單個字符。.可以匹配任意單個字符。\\用來對字符進行轉義。在正則表達式裡,有特殊含義的字符序列總是以\\字符開頭。

——

本文刪減自《正則表達式必知必會(修訂版)》,豆瓣評分9.2

十分鐘快速入門「正則表達式」,程序員一定用得上的編程利器

書總共一百多頁,短小精悍,實例+說明,是全球程序員公認的正則表達式最佳速成教材。它精選了正則表達式中最常用,最重要的知識,從簡單的文本匹配開始,通過簡明又實用的示例,循序漸進的介紹更高級的內容。

目錄

第1章 正則表達式入門

第2章 匹配單個字符

第3章 匹配一組字符

第4章 使用元字符

第5章 重複匹配

第6章 位置匹配

第7章 使用子表達式

第8章 反向引用

第9章 環視

第10章 嵌入式條件

第11章 常見問題的正則表達式解決方案

附錄 A 常見應用軟件和編程語言中的正則表達式

"

相關推薦

推薦中...