php正则表达式提取中文

severaltipsaboutRegularExpressions

//$pattern = “/file-([0-2]d{3})-([1-9]d?卡塔尔(قطر‎/”;
这一个正则表达式,对文件夹的月日进行捕获,再进一层决断管理 

目前业主名称为二个多少查重的小演习,涉及从一个含有粤语字段的文书中领到出此中的国语字段并积存,使用php开拓。中间涉及到php正则表达式中文匹配的标题,网络收罗第一次全国代表大会片,然而也很乱未有一个准信儿,经过自个儿的代码的改变和查验,先将extract函数写下。

1.processforgreedy

02 for($i =2005;$i<=2009;$i++) 

首先要留意到的是,双字节字符的编码难题,这里大家之后还会遇见像阿拉伯语、斯洛伐克语等编码难题,与中文通晓上是三个意思。

Bydefault,thequantifiersaregreedy,thatis,they

03 { 

  1. GBK (GB2312/GB18030)

matchasmuchaspossible(uptothemaximumnumberofper-

04 for($j = 1;$j<30;$j++) 

x00-xff GBK双字节编码范围

mittedtimes),withoutcausingtherestofthepatternto

05 { 

x20-x7f ASCII

fail.Theclassicexampleofwherethisgivesproblemsisin

06 $dest_dir = “text/file-“.$i.”-$j”; 

xa1-xff 中文 gb2312

tryingtomatchcommentsinCprograms.Theseappearbetween

07 if(!is_dir($dest_dir)) mkdir($dest_dir,0777); 

x80-xff 中文 gbk

thesequences/*and*/andwithinthesequence,individual

08 } 

  1. UTF-8 (Unicode)

*and/charactersmayappear.AnattempttomatchCcom-

09 } 

u4e00-u9fa5 (中文)

mentsbyapplyingthepattern

10 //创立一些不满足条件的文件夹 

x3130-x318F (韩文

//*.*/*/

11   

xAC00-xD7A3 (韩文)

tothestring

12 for($t = 0;$t<10;$t++) 

u0800-u4e00 (日文)

/*firstcommand*/notcomment/*secondcomment*/

13 { 

在Notepad++下面,我们得以率先举行测量试验大家的正则书写的失实与否。第叁个表明式笔者是利用[u4e00-u9fa5]+来调查的,+号表示不独有八个

fails,becauseitmatchestheentirestringduetothe

14 $dest_dir = “text/file-“.$t; 

图片 1

greedinessofthe.*item.

15 if(!is_dir($dest_dir)) mkdir($dest_dir,0777); 

相配符。结果与预期雷同,那么,是不是在剧本中就能够使用那些正则了呢?

However,ifaquantifierisfollowedbyaquestionmark,

16 } 

咱俩测验一下,大家接受preg_match_all(‘/[u4e00-u9fa5]+/’,
$subject,$matchesState of Qatar调用,然后您却看见了这般三个结实:Compilation failed:
PCRE does not support L, l, N{name}, U, or u at offset
2。。。。是否很头大??那到底是什么样原因?

thenitceasestobegreedy,andinsteadmatchestheminimum

17   

翻开了成都百货上千素材后意识,u
(PCRE_UTF8卡塔尔,正是上面的PCRE,那是是一个Perl库,包蕴 perl
宽容的正规表明式库。此更正符启用了一个 PCRE 中与 Perl
不合作的附加效率。情势字符串被当成 UTF-8。本修改符在 Unix 下自 PHP 4.1.0
起可用,在 win32 下自 PHP 4.2.3
起可用。而php正则表明式对于十三进制数据的表明方式上也不完全同样,在php中,是用x表示十八进制数据的。下边大家就将代码优化一下,质量评定函数变
为:

numberoftimespossible,sothepattern

18 //遍历文件夹管理 . 

classstoreDataAdapterextendsStore{private$dsData;/***
数据转变函数,调用preg_match_all依照$pattern正则来开展数值相称,并将赶回的结果以数组形式积存在$matches中,*
$matches[0]将含有与成套情势相配的文本,$matches[1]
将包括与第二个捕获的括号中的子形式所相称的文本,就那样类推*@seeStore::data_convert()*/publicfunction
data_convert($pattern,$subject)
{$matches=array();if(preg_match_all($pattern,
$subject,$matches)){return$matches[0];}else{returnnull;}}}

//*.*?/*/

19 function listFile($dir) 

调用的时候成为:

小结:

20 {  

$store=newstoreDataAdapter($txtContent);$match=array();$dsName=$store->data_convert(‘/[x7f-xff]+/’,$txtContent);foreach($dsNameas$val){echo$val.”
“;      }

?与/U有相符意义,但与此同一时间现身相互抵消

21 $a = array(); 

输入文件为:

如下:

22 $handle = opendir($dir); 

图片 2

$a=asdf/*asdfaldsfasdf*/asfdasldf;kfldsj*/asfddsaf;

23 while($file = readdir($handle)) 

,上边是领收取普通话之后的输出文件内容:

$pattern=////*.*?/*///;

24 { 

图片 3

//$pattern=////*.*/*///U;

25 handle_dir($dir,$file,&$a); 

,适合预期供给。

//$pattern=////*.*?/*///U;

26 } 

百度试了不菲方式都特别,原本是和蔼从不相配两个

preg_match($pattern,$a,$match);

27   

原文:

print_r($match);

28 echo “the rege_array is “; 

29 print(“<pre>”); 

2.Assertions

30 print_r($a); 

/w+(?=;)

31 print(“</pre>”); 

matchesawordfollowedbyasemicolon,butdoesnotinclude

32 } 

thesemicoloninthematch,and

33   

foo(?!bar)

34 function handle_dir($dir,$file,$a) 

matchesanyoccurrenceoffoothatisnotfollowedby

35 { 

bar.Notethattheapparentlysimilarpattern

36   

小结:

37 if($file == “.” || $file == “..”) return ; 

(?!卡塔尔国只前向推断匹配,如bar(?!foo),而(?!foo卡塔尔国bar一点意义都没有

38 $minYear = 2008; 

(?

39 $maxDay = 13; 

40   

41 $pattern = “/file-([0-2]d{3})-([1-9]d?)/”; 

42 $destPath = $dir.”/”.$file; 

43   

44 if(!is_dir($destPath)) 

45 { 

46 //echo “$destPath is not a dir ;”; 

47 return; 

48 } 

49   

50 //删除不满足格式的文本 

51 if(!preg_match($pattern,$file)) 

52 { 

53 //echo “<font color=blue>$file</font><font
color=red>is not the right rege. the program will unlink — $destPath
–</font><br/>”; 

54 // unlink($destPath); 

55 return; 

56 } 

57   

58 preg_match_all($pattern,$file,$matchs); 

59   

60 //echo “<font color=blue>$file</font> is the right
rege”; 

61 //print_r($matchs); 

62 //echo “the year is “.$matchs[1][0].” and the day is
“.$matchs[2][0].”</br>”; 

63 if(intval($matchs[1][0]) >$minYear &&
intval($matchs[2][0]) < $maxDay) 

64 { 

65 $a[]= $destPath; 

66 }else { //不满足条件的 

67 //unlink($destPath); 

68   

69 } 

70 } 

71   

72 listFile(“text”);

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图