Regular Expression the first touch

The almighty regular expression which is not supported by Flash but found in Central is now serving me in my new love —

PHP.

为了建立网站数据库中的countries表,我进入Microsoft .NET Passport的注册页面。里面的国家(地区)项包含了全世界的各个国家,不过

是个HTML的select+option,不能直接用。ViewSource后将select控件部门的代码存入countries.txt。我想用php的regular expression。

//countries.txt里的内容如下

<option value="AL" id="AL">阿尔巴尼亚

<option value="DZ" id="DZ">阿尔及利亚

<option value="AF" id="AF">阿富汗

<!– 还有很多 –>

convert.php———————————————————

<?php
$content = file_get_contents(‘countries.txt’);
echo ereg_replace("<.*>", ‘<br/>’, $content);
?>

结果输出一片空白,POSIX Regular Expression中的*太贪心,总是尝试匹配尽可能多的内容,结果把整个文本替换成了一个<br/>! *,做星号

要厚道,怎么能这么贪心?还好php除了支持POSIX的Regular Expression之外,还有Perl Compatible,在*后面跟一个?以灭其贪欲,"/<.*?

>/"将尽可能匹配最短的内容。

new perl compatible version—————————————–

<?php
$content = file_get_contents(‘countries.txt’);
echo preg_replace("/<.*?>/", ‘<br/>’, $content);
?>

output—————————–
阿尔巴尼亚
阿尔及利亚
阿富汗
阿根廷
阿拉伯联合酋长国
阿鲁巴
阿曼
阿塞拜疆
埃及
……..

现在虽然去掉了繁杂的HTML tags,但是仍然不能直接录入数据库。
<?php
$content = file_get_contents(‘countries.txt’);
$content = preg_replace("/<.*?id=\"(.*?)\"(.*?)>/", "\r\n\\1;", $content);

//
//\\1表示正则表达式中第一个()中的内容,如果是\\2的话,则表示第二个()中的内容,以此类推。这个功能非常强大,正规的称谓是backreference,中文怎么叫?向后引用?
$arr = split("\r\n", $content);
$newcontent = ”;
for($i = 0; $i < count($arr); $i++) {
 $arr2 = split(";", $arr[$i]);
 print ‘<br/>’;
 $newcontent.= (($i).";"."\"".$arr2[0]."\"".";\"".$arr2[1]."\"\r\n");
}
$file = fopen(‘a.txt’,’w+’);
fputs($file, $newcontent);
fclose($file);
?>
a.txt—————————-
0;"";""
1;"AL";"阿尔巴尼亚"
2;"DZ";"阿尔及利亚"
3;"AF";"阿富汗"
4;"AR";"阿根廷"
5;"AE";"阿拉伯联合酋长国"
6;"AW";"阿鲁巴"
7;"OM";"阿曼"
8;"AZ";"阿塞拜疆"
9;"EG";"埃及"
10;"ET";"埃塞俄比亚"
11;"IE";"爱尔兰"
12;"EE";"爱沙尼亚"
13;"AD";"安道尔"
……..
手工删除第一行,然后用phpMyAdmin导入数据库。

正则表达式的相关函数,manual里面讲得很清楚 :) 

Advertisements
This entry was posted in PHP Rocks. Bookmark the permalink.

2 Responses to Regular Expression the first touch

  1. Unknown says:

    wow gold!All wow gold US Server 24.99$/1000G on sell! Cheap wow gold,wow gold,wow gold,Buy Cheapest/Safe/Fast WoW US EU wow gold Power leveling wow gold from the time you wWorld of Warcraft gold ordered!

    wow power leveling wow power leveling power leveling wow power leveling wow powerleveling wow power levelingcheap wow power leveling wow power leveling buy wow power leveling wow power leveling buy power leveling wow power leveling cheap power leveling wow power leveling wow power leveling wow power leveling wow powerleveling wow power leveling power leveling wow power leveling wow powerleveling wow power leveling buy rolex cheap rolex wow gold wow gold wow gold wow gold -209891098855207

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s