文字列処理を行うときに、文字列処理関数で目的を達成できない場合は、正規表現を使用して目的を達成します。
正規表現が使用される一般的な状況には、マッチング、検索、セグメント化、検索、置換が含まれます。以下では、これらの状況をそれぞれ PHP と Python で実装し、比較します。 通常の PHP は PCRE スタイルを採用しています。
#出力: 文字列 'P' (length=1)
preg_match('/(w+)/',$strs,$m);
#2 検索検索 パイソン:patt = re.compile(r'(w+)',re.I) print patt.search(strs).group(1) #Output P
検索方法は同じです。見つかった場合はすぐに返されます。PHP では、preg_match(_all) を使用してこれを実現できます。 PHP: 同上 #3 マッチングスプリット パイソン:patt = re.compile(r'w+',re.I) for i in patt.split(strs): #ここでは Unicode オブジェクト出力が使用されることに注意してください print unicode(i,'utf-8') #上記の出力「私はあなたを愛しています、知っていますか?」ははは」
PHP でこれを実現するには preg_split() を使用できます PHP:
/**出力:
print patt.findall(strs) #出力 ['P', 'y', 't', 'h', 'o', 'n', 'fe']
PHP でこれを実現するには preg_match_all() を使用できます PHP:
/**
リーリー
リーリー #5 検索と置換 実際、Python の finditer() メソッドは検索と置換ではなく、各一致結果 (Match オブジェクト) に順次アクセスする反復子を返すだけです Python:
for i in patt.finditer(strs): print i.group() #上記の出力 '''P y th on fe'''
这和PHP中的preg_filter()有所不同,preg_filter()与preg_replace()都是执行一个正则表达式的搜索和替换。在python中正则方法中,用于查找替换的是:sub()与subn()。 需要注意的是sub()返回的一个新字符串,不是作用在原对象上。 subn()返回的是一个以“新字符串和替换的次数”组成的元组,也没有作用到原对象上。 #替换三次 print patt.sub('99',strs,3) #输出 '我爱99你99你99知h吗o?n哈哈fe哈' print patt.subn('99',strs) #输出:是一个元组('我爱99你99你99知99吗99?99哈哈99哈',7) 替换与引用#这里批量替换文章中的图片的路径(old_c 是文章的内容)
img_dir = 'test'
img_patt = re.compile('src=".*?/(\w+\.\w+)"')
new_c = img_patt.sub(r'src="./%s/\1"'%img_dir,old_c) PHP:
#这里批量替换文章中的图片的路径(old_c 是文章的内容)
img_dir = 'test' img_patt = re.compile('src=".*?/(\w+\.\w+)"') new_c =img_patt.sub(r'src="./%s/\1"'%img_dir,old_c) #输出:
<i><i><i><font><b><b><font>string '我爱999你999你999知999吗999?999哈哈999哈' <i>(length=51) </i></font></b></b></font></i></i></i>