首頁 web前端 js教程 正規表示式教學的位置比對教學(附程式碼)

正規表示式教學的位置比對教學(附程式碼)

Mar 29, 2018 pm 06:03 PM
位置 匹配 表達式

這次帶給大家正規表示式教學的位置比對教學(附程式碼),使用正規表示式教學位置相符的注意事項有哪些,以下就是實戰案例,一起來看一下。

本文實例講述了正規表示式教程之位置匹配。分享給大家供大家參考,具體如下:

註:在所有例子中正規表示式匹配結果包含在源文本中的之間,有的例子會使用Java來實現,如果是java本身正規表示式的用法,會在對應的地方說明。所有java例子都在JDK1.6.0_13下測試通過。

一、問題引入

如果想匹配一段文字中的某個單字(暫不考慮多行模式,將在後面介紹),我們可能會像下面這樣:

文字:Yesterday is history, tomorrow is a mystery, but today is a gift.

正規表示式:is

成果:Yesterday 【is】 h【is】tory, tomorrow 【is】 a mystery, but today 【is】 a gift.

分析:本來只是要配對單字is,但把其他單字中包含的is​​也配對出來了。要解決這個問題,使用邊界界定符,也就是在正規表示式裡用一些元字元來表示我們想要讓匹配操作在什麼位置(或邊界)發生。

二、單字邊界

一個常用的邊界是由限定符\b指定的單字邊界,\b用來匹配單字的開始和結尾。更確切地說,它是匹配這樣一個位置,這個位置位於一個能夠用來構成單字的字元(字母、數字、下劃線,也就是與\w相符的字元)和一個不能用來構成單字的字元(與\W相符的字元)之間。來看前面的範例:

文字:Yesterday is history, tomorrow is a mystery, but today is a gift.

##正規表示式:

\bis \b

結果:

Yesterday 【is】 history, tomorrow 【is】 a mystery, but today 【is】 a gift.

分析:在原始文字中,單字is的前後都有一個空格,而這與模式\bis\b相符(空格是用來分隔單字的字元之一) 。而單字history中也包含了is,因為它的前後分別有一個字符h和t,這兩個字符都不能與\b匹配。

如果不符合一個單字邊界,則使用\B。如:

文字:

Please enter the nine-digit id as it appears on your color - coded pass-key.

#正規表示式:

\B -\B

結果:

Please enter the 【nine-digit】 id as it appears on your color - coded 【pass-key】 .

分析:\B-\B將匹配一個前後都不是單字邊界的連字符,nine-digit和pass-key中連字符前後都沒有空格,所以能夠匹配,而color - coded中連字符前後都有空格,所以不能匹配。

三、字串邊界

單字邊界可以用來進行與單字相關的位置匹配(單字開頭、結束、整個單字等等)。而字串邊界也有著類似的用途,只不過是用來進行與字串相關的位置匹配(字串開頭、結束、整個字串等等)。用來定義字串邊界的元字元有兩個:一個是用來定義字串開頭的^,另一個是用來定義字串結尾的$。

例如要檢查一個XML文檔的合法性,合法的XML文檔都以這樣形式開頭:

文本:

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="ear">
</project>
登入後複製

正则表达式:^\s*<\?xml.*?\?>

结果:



分析:^匹配一个字符串的开头位置,所以^\s*将匹配一个字符串的开头位置和随后的零个或多个空白字符,因为标签前面允许有空格、制表符、换行符等空白字符。

$元字符符的用法除了位置上的差异外,与^用法完全一样。比如,检查一个html页面是否以结尾,可以用模式:\s*$

四、多行匹配模式

正则表达式可以通过一些特殊的元字符来改变另外一些元字符的行为。可以通过(?m) 来启用多行匹配模式。多行匹配模式将使得正则表达式引擎把行分隔符当做一个字符串分隔符来对待。在多行匹配模式下,^不仅匹配正常的字符串开头,还将匹配行分隔符(换行符)后面的开始位置,$不仅匹配正常的字符串结尾,还将匹配行分隔符(换行符)后面的结束位置。

在使用时,(?m)必须出现在整个模式的最前面。比如,通过正则表达式把一段java代码中的单行注释(以//开始)内容全部找出来。

文本:

publicDownloadingDialog(Frame parent){
     //Callsuper constructor, specifying that dialog box is modal.
     super(parent,true);
     //Setdialog box title.
     setTitle("E-mailClient");
     //Instructwindow not to close when the "X" is clicked.
     setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
     //Puta message with a nice border in this dialog box.
     JPanelcontentPanel = new JPanel();
     contentPanel.setBorder(BorderFactory.createEmptyBorder(5,5, 5, 5));
     contentPanel.add(newJLabel("Downloading messages..."));
     setContentPane(contentPanel);
     //Sizedialog box to components.
     pack();
     //Centerdialog box over application.
     setLocationRelativeTo(parent);
}
登入後複製

正则表达式:(?m)^\s*//.*$

结果:

         publicDownloadingDialog(Frame parent){
【              //Call superconstructor, specifying that dialog box is modal.】                   super(parent,true);
【              //Set dialog boxtitle.】                   setTitle("E-mailClient");
【              //Instruct windownot to close when the "X" is clicked.】                   setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
【              //Put a messagewith a nice border in this dialog box.】                   JPanelcontentPanel = new JPanel();
                   contentPanel.setBorder(BorderFactory.createEmptyBorder(5,5, 5, 5));
                   contentPanel.add(newJLabel("Downloading messages..."));
                   setContentPane(contentPanel);
【              //Size dialog boxto components.】                   pack();
【              //Center dialogbox over application.】                   setLocationRelativeTo(parent);
         }

分析:^\s*//.*$将匹配一个字符串的开始,然后是任意多个空白字符,再后面是//,再往后是任意文本,最后是一个字符串的结束。不过这个模式只能找出第一条注释,加上(?m)前缀后,将把换行符视为一个字符串分隔符,这样就可以把每一行注释匹配出来了。

java代码实现如下(文本保存在text.txt文件中):

public static String getTextFromFile(String path) throws Exception{
  BufferedReader br = new BufferedReader(new FileReader(new File(path)));
  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);
  }
    br.close();
  return sb.toString();
}
public static void multilineMatch() throws Exception{
  String text = getTextFromFile("E:/text.txt");
  String regex = "(?m)^\\s*//.*$";
  Matcher m = Pattern.compile(regex).matcher(text);
  while(m.find()){
    System.out.println(m.group());
  }
}
登入後複製

输出结果如下:

//Call super constructor, specifying that dialog box is modal.
//Set dialog box title.
//Instruct window not to close when the "X" is clicked.
//Put a message with a nice border in this dialog box.
//Size dialog box to components.
//Center dialog box over application.

五、小結

正規表示式不僅可以用來匹配任意長度的文字區塊,還可以用來匹配出現在字串中特定位置的文字。 \b用來指定一個單字邊界(\B剛好相反)。 ^和$用來指定單字邊界。如果與(?m)搭配使用,^和$也會符合在一個換行符號處開頭或結尾的字串。在接下來的文章中將介紹子表達式的使用。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

正規怎麼符合連續數字

正規實作最小符合的開發經驗

以上是正規表示式教學的位置比對教學(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

詳細介紹如何在Windows 11上開啟環境變數設定 詳細介紹如何在Windows 11上開啟環境變數設定 Dec 30, 2023 pm 06:07 PM

環境變數功能是系統中的配置程式運行必備工具,但是在最新的win11系統中還有許多的用戶不知道怎麼設置打開,下面就給你們帶來了win11環境變量打開位置詳細介紹,快來一起學習操作一下吧。 win11環境變數在哪:1、先輸入“win+R”,開啟運行框。 2、然後在裡面輸入指令:controlsystem。 3.在開啟的系統資訊介面中,選擇左側選單的「進階系統設定」。 4.隨後在開啟的「系統屬性」視窗選擇下方的「環境變數」選項。 5.最後在開啟的環境變數中,即可依照需求進行相關的設定。

Win11的啟動路徑以及如何開啟它 Win11的啟動路徑以及如何開啟它 Jan 03, 2024 pm 11:13 PM

每個Windows系統都有一個啟動路徑,如果你在其中新增了檔案或軟體,就會在開機的時候打開它。不過不少朋友不知道win11啟動路徑在哪裡,其實我們只要進入C碟的對應資料夾就可以了。 win11啟動路徑:1、雙擊開啟「此電腦」2、直接將此路徑「C:\ProgramData\Microsoft\Windows\StartMenu\Programs\Startup」貼進路徑方塊。 3.這裡就是win11啟動路徑了,如果我們要開機開啟檔案就可以將檔案放進來。 4.如果你根據這條路徑進不來,可能是被隱藏了。

windows10憑證管理員在哪裡 windows10憑證管理員在哪裡 Jul 09, 2023 am 10:09 AM

憑證管理器是使用者用來管理web憑證和Windows憑證的作用,但很多使用者還不清楚windows10憑證管理器在哪裡。其實憑證管理器就在操作面板上,大家在打開控制面板以後記得將查看方法改成小圖標,那樣就能見到憑證管理器了,點擊查看就能查看各類信息了,如果想要查看大量,就需要輸入帳戶密碼。 windows10憑證管理員在哪裡:1、在系統中開啟控制台,點選右上角的檢視方法,將類型轉換成小圖示。 2.以小圖示的方式查看以後,點選「憑證管理員」。 3.進來憑證管理器以後,能夠看見有關作用的介紹,主要用於

星穹鐵道克勞克影視樂園摺紙小鳥位置 星穹鐵道克勞克影視樂園摺紙小鳥位置 Mar 27, 2024 pm 11:51 PM

星穹鐵道克勞克影視樂園總共有20隻摺紙小鳥,有很多玩家不知道克勞克影視樂園摺紙小鳥在哪,小編已經把每隻摺紙小鳥位置全部都總結出來了,幫助大家進行尋找,具體內容一起來看看這篇克勞克影視樂園摺紙小鳥位置最新匯總。崩壞星穹鐵道攻略大全星穹鐵道克勞克影視樂園摺紙小鳥位置1、克勞克影視樂園一層2、克勞克影視樂園二層

了解pip安裝包儲存的位置和結構 了解pip安裝包儲存的位置和結構 Jan 18, 2024 am 08:23 AM

深入了解pip安裝的套件存放位置,需要具體程式碼範例pip是Python語言常用的套件管理工具,用於方便安裝、升級和管理Python套件。在使用pip安裝套件時,它會自動從PyPI(Python套件索引)下載對應的套件文件,並將其安裝到指定的位置。那麼,pip安裝的套件究竟存放在哪裡呢?這是很多Python開發者都會遇到的問題。本文將深入探討pip安裝的套件存放位置,並提供

Go語言正規表示式實踐指南:如何匹配十六進位顏色代碼 Go語言正規表示式實踐指南:如何匹配十六進位顏色代碼 Jul 13, 2023 am 10:46 AM

Go語言正規表示式實踐指南:如何匹配十六進位顏色代碼引言:正規表示式是一種強大且靈活的工具,用於字串的模式匹配和查找。在Go語言中,我們可以使用內建的正規表示式套件regexp來實作這些操作。本文將介紹如何使用正規表示式在Go語言中匹配十六進位顏色代碼。導入正規表示式套件首先,我們需要導入Go語言的正規表示式套件regexp。可以在程式碼的開頭加入以下導入語句:i

win11關機位置 win11關機位置 Jan 10, 2024 am 09:14 AM

如果我們要長時間離開電腦,那麼最好將電腦關機保護它,那麼win11關機在哪裡呢,其實一般來說只要打開開始選單,在其中就可以找到關機按鈕了。 win11關機在哪裡:答:在開始功能表的電源按鈕。 1.首先我們點選底部工作列的「windows標誌」開啟「開始功能表」2、開啟後,可以在右下角找到「電源」按鈕,如圖所示。 3.點擊電源按鈕後,就能看到「關機」了,點擊它就能關機。 4.如果因為當機等特殊狀況無法關機,那麼可以直接用電腦上的「電源鍵」長按強制關機。

使用Apple的簽入功能:iOS 17中的訊息應用程式指南 使用Apple的簽入功能:iOS 17中的訊息應用程式指南 Sep 14, 2023 pm 09:13 PM

iOS17中的Apple在「資訊」中添加了一項新功能,可讓您在安全回家時讓親人知道。它被稱為簽入,這是你如何使用它。無論你是在天黑後步行回家,還是在清晨跑步,你都可以在Apple的「資訊」應用程式中與家人或朋友一起開始簽到,讓他們知道你何時安全回家。在您到達後,CheckIn會自動偵測您何時在家,並通知您的朋友。當他們收到警報並且簽入已結束時,您也會收到通知。如果發生意外情況並且您在途中被延誤,CheckTab甚至會識別出您沒有取得進展並與您一起辦理登機手續,詢問您是否要增加預計到達時間。如果您沒有

See all articles