亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

正則表達式筆記三則

 更新時間:2010年07月27日 20:58:51   作者:  
筆記三則,貼在這里。
首字母大小寫無關(guān)模式
有一段時間,我在寫正則表達式來匹配Drug關(guān)鍵字時,經(jīng)常寫出 /viagra|cialis|anti-ed/ 這樣的表達式。為了讓它更美觀,我會給關(guān)鍵詞排序;為了提升速度,我會使用 /[Vv]iagra/ 而非/viagra/i ,只讓必要的部分進行大小寫通配模式。確切地說,我是需要對每個單詞的首字母進行大小寫無關(guān)的匹配。

我寫了這樣的一個函數(shù),專門用來批量轉(zhuǎn)換。

復(fù)制代碼 代碼如下:

#convert regex to sorted list, then provide both lower/upper case for the first letter of each word
#luf means lower upper first

sub luf{
# split the regex with the delimiter |
my @arr=sort(split(/\|/,shift));

# provide both the upper and lower case for the
# first leffer of each word
foreach (@arr){s/\b([a-zA-Z])/[\l$1\u$1]/g;}

# join the keyword to a regex again
join('|',@arr);
}

print luf "sex pill|viagra|cialis|anti-ed";
# the output is:[aA]nti-[eE]d|[cC]ialis|[sS]ex [pP]ill|[vV]iagra

控制全局匹配下次開始的位置

記得jyf曾經(jīng)問過我,如何控制匹配開始的位置。嗯,現(xiàn)在我可以回答這個問題了。Perl 提供了 pos 函數(shù),可以在 /g 全局匹配中調(diào)整下次匹配開始的位置。舉例如下:
復(fù)制代碼 代碼如下:

$_="abcdefg";
while(/../g)
{
print $&;
}

其輸出結(jié)果是每兩個字母,即ab, cd, ef

可以使用 pos($_)來重新定位下一次匹配開始的位置,如:

復(fù)制代碼 代碼如下:

$_="abcdefg";
while(/../g)
{
pos($_)--; #pos($_)++;
print $&;
}

輸出結(jié)果:

復(fù)制代碼 代碼如下:

pos($_)--: ab, bc, cd, de, ef, fg.
pos($_)++: ab, de.

可以閱讀 Perl 文檔中關(guān)于 pos的章節(jié)獲取詳細(xì)信息。

散列與正則表達式替換
《effective-perl-2e》第三章有這樣一個例子(見下面的代碼),將特殊符號轉(zhuǎn)義。
復(fù)制代碼 代碼如下:

my %ent = { '&' => 'amp', '<' => 'lt', '>' => 'gt' };
$html =~ s/([&<>])/&$ent{$1};/g;

這個例子非常非常巧妙。它靈活地運用了散列這種數(shù)據(jù)結(jié)構(gòu),將待替換的部分作為 key ,將與其對應(yīng)的替換內(nèi)容作為 value 。這樣只要有匹配就會捕獲,然后將捕獲的部分作為 key ,反查到 value 并運用到替換中,體現(xiàn)了高級語言的效率。

不過,這樣的 Perl 代碼,能否移植到 Python 中呢? Python 同樣支持正則,支持散列(Python 中叫做 Dictionary),但是似乎不支持在替換過程中插入太多花哨的東西(替換行內(nèi)變量內(nèi)插)。

查閱 Python 的文檔,(在 shell 下 執(zhí)行 python ,然后 import re,然后 help(re)),:

復(fù)制代碼 代碼如下:

sub(pattern, repl, string, count=0)
Return the string obtained by replacing the leftmost
non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable;
if a string, backslash escapes in it are processed. If it is
a callable, it's passed the match object and must return
a replacement string to be used.

原來 python 和 php 一樣,是支持在替換的過程中使用 callable 回調(diào)函數(shù)的。該函數(shù)的默認(rèn)參數(shù)是一個匹配對象變量。這樣一來,問題就簡單了:

復(fù)制代碼 代碼如下:

ent={'<':"lt",
'>':"gt",
'&':"amp",
}

def rep(mo):
return ent[mo.group(1)]

html=re.sub(r"([&<>])",rep, html)

python 替換函數(shù) callback 的關(guān)鍵點在于其參數(shù)是一個匹配對象變量。只要明白了這一點,查一下手冊,看看該種對象都有哪些屬性,一一拿來使用,就能寫出靈活高效的 python 正則替換代碼。

相關(guān)文章

  • JS基礎(chǔ)教程——正則表達式示例(推薦)

    JS基礎(chǔ)教程——正則表達式示例(推薦)

    本文給大家分享js基礎(chǔ)之正則表達式知識,以及在正則表達式中() [] {}所代表的意思,本文給大家介紹的非常詳細(xì),需要的朋友參考下
    2017-01-01
  • javascript正則表達式分析

    javascript正則表達式分析

    想必很多人都對正則表達式都頭疼。今天,我以我的認(rèn)識,加上網(wǎng)上一些文章,希望用常人都可以理解的表達方式來和大家分享學(xué)習(xí)經(jīng)驗。
    2008-05-05
  • 正則表達式與HTML5新元素

    正則表達式與HTML5新元素

    這篇文章主要介紹了正則表達式與HTML5新元素的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • JAVA中正則表達式小總結(jié)(整理)

    JAVA中正則表達式小總結(jié)(整理)

    昨天,有朋友請教我關(guān)于正則表達式的問題,就這點問題當(dāng)時也真是把我難住了,無奈不得不學(xué)習(xí)了,于是到搜了寫相關(guān)資料,為了加深了印象,現(xiàn)把相關(guān)內(nèi)容整理如下,供大家參考學(xué)習(xí)
    2015-09-09
  • Eclipse使用正則表達式快速修改代碼的方法

    Eclipse使用正則表達式快速修改代碼的方法

    這篇文章主要介紹了Eclipse使用正則表達式快速修改代碼的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Java正則表達式入門學(xué)習(xí)

    Java正則表達式入門學(xué)習(xí)

    這篇文章主要介紹了Java正則表達式入門學(xué)習(xí)基礎(chǔ)知識,全面分析了表示匹配次數(shù)的符號使用方法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 開發(fā)過程最全的正則表達式匹配中英文、字母和數(shù)字

    開發(fā)過程最全的正則表達式匹配中英文、字母和數(shù)字

    這篇文章主要介紹了開發(fā)過程最全的正則表達式匹配中英文、字母和數(shù)字 的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 談?wù)務(wù)齽t表達式中的句號.

    談?wù)務(wù)齽t表達式中的句號.

    好久沒更新內(nèi)容了,今天分享一個小的知識點,一個正則表達式方面的很容易被人忽視的坑,需要的朋友可以參考下
    2018-06-06
  • 正則表達式之回溯

    正則表達式之回溯

    我通常在匹配一個字符串或是一組數(shù)字的時候會用到正則表達式,但很少會了解它是如何真正開始工作的?它的工作原理是什么?其實正則表達式里面的貓膩還挺多水也挺深的,有時候還不太好理解。
    2010-04-04
  • grep正則表達式匹配中括號的方法實例

    grep正則表達式匹配中括號的方法實例

    正則中的括號有不同的意義,不同的字符在括號中也有不同的意義,下面這篇文章主要給大家介紹了關(guān)于grep正則表達式匹配中括號的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評論