亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: send_linux
打印 上一主題 下一主題

正則表達(dá)進(jìn)階大討論!歡迎參與討論!(獲獎名單已公布-2012-7-6) [復(fù)制鏈接]

論壇徽章:
27
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:38CU大;照
日期:2013-05-20 10:46:44CU大;照
日期:2013-09-18 15:24:09CU大;照
日期:2013-09-18 15:24:20CU大;照
日期:2013-09-18 15:24:25CU大;照
日期:2013-09-18 15:24:31CU大;照
日期:2013-09-18 15:24:36CU大牛徽章
日期:2013-09-18 15:24:41CU大牛徽章
日期:2013-09-18 15:24:48CU大;照
日期:2013-09-18 15:24:52處女座
日期:2013-09-27 17:45:43
21 [報告]
發(fā)表于 2012-06-01 00:40 |只看該作者
本帖最后由 yifangyou 于 2012-06-01 00:51 編輯

1、在你的日常工作中會使用正則表達(dá)式解決什么樣的問題?
答:我在日常工作使用正則表達(dá)式主要解決
1) 日志分析或者查找或者替換文字,例如用perl進(jìn)行統(tǒng)計apache中某個頁面的訪問量,在vi里替換
2)查找處理文件, ls a[1-5].log  ,find,或者egrep ,  用sed 替換或者刪除文件內(nèi)容。
3) 在開發(fā)網(wǎng)站時,用javascript驗證表單,在php或者java驗證參數(shù)格式是否正確
4)做lucene的網(wǎng)絡(luò)蜘蛛時,用正則進(jìn)行對網(wǎng)頁url進(jìn)行過濾,或者提取網(wǎng)頁中的部分代碼。
5)用php中的正則進(jìn)行解析http協(xié)議
6)在apache和nginx中用url重寫實現(xiàn)偽靜態(tài)


2、正則表達(dá)式的用法在各個語言、腳本里面略有不同,你有什么學(xué)習(xí)經(jīng)驗可以分享給初學(xué)者?
答:
1)perl的正則表達(dá)式是最純正的,perl的最強項就是處理文本,我個人第一次接觸正則也是從perl的學(xué)習(xí)開始。
2)php作為最接近perl的一門語言,優(yōu)點是沒有perl語法那么晦澀難懂,把perl的靈活多變的正則表達(dá)式給繼承過來,但是使用起來沒有perl那么好用,而且沒有perl效率高
3)javascript使用正則時和perl比較接近,個人感覺比php的正則更好用,主要用于驗證用戶輸入,提醒輸入錯誤,提供用戶體驗,沒有支持perl中的translate。
下面是我一些常用的正則表達(dá)式
javascript:
  1. function checkIp(tmpstr)
  2. {
  3.                 var patrn=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
  4.                 var r=patrn.exec(tmpstr)
  5.                 if(!r)
  6.                 {
  7.                         return false;
  8.                 }
  9.                 if(r[1]<=255 && r[2]<=255 &&r[3]<=255 && r[4]<=255 )
  10.                         return true;
  11.                 else
  12.                         return false;
  13. }
  14. function is_numeric(tmpstr)
  15. {
  16.                 var patrn=/^\d+$/;
  17.                 var r=patrn.exec(tmpstr)
  18.                 if(!r)
  19.                 {
  20.                         return false;
  21.                 }
  22.                 return true;
  23. }
  24.        
  25. String.prototype.trim = function()
  26. {
  27.         return this.replace(/(^\s*)|(\s*$)/g, "");
  28. }
  29. /*
  30. * 只能輸入英文數(shù)字.-下劃線
  31. * @param str input的value
  32. * @use <input onkeyup="value=filterchar(value)" onafterpaste="value=filterchar(value)" />
  33. * */
  34. function filterchar(str){
  35.         var p=/[^\w\-\.]/g
  36.         return str.replace(p,'');
  37. }

  38. /*
  39. * 過濾特殊字符
  40. * @param str input的value
  41. * @use <input onkeyup="value=filterschar(value)" onafterpaste="value=filterschar(value)" />
  42. * */
  43. function filterschar(str){
  44.                 var p=/[\'\"#,;&%^\$!\+=\|\\\/ ]/g
  45.                 return str.replace(p,'');
  46. }
復(fù)制代碼
php:
  1. /*
  2.         年 $matches[0]
  3.         月 $matches[1]
  4.         日 $matches[2]
  5.         時 $matches[3]
  6.         分 $matches[4]
  7.         秒 $matches[5]
  8.        
  9.   解析Y-m-d H:i:s YmdHis  Y/m/d H:i:s等等
  10. */
  11. function analytime($adate)
  12. {
  13.         if(preg_match("/^(\d{4})\D{0,3}(\d{2})\D{0,3}(\d{2})\D{0,3}(\d{2})\D{0,3}(\d{2})\D{0,3}(\d{2})$/i",$adate,$matches))
  14.         {
  15.                 array_shift($matches);
  16.                 return $matches;       
  17.         }
  18.         return 0;
  19. }
  20. //判斷md5
  21.         function isMd5str($str)
  22.         {
  23.                 return preg_match("/\w{32}/i",$str);
  24.         }
復(fù)制代碼
perl:
  1. #本程序的功能為判斷一個字符串是不是ip,是ipv4還是ipv6
  2. #  以下是用來將 IPv6 地址表示為文本字符串的三種常規(guī)形式:
  3. #冒號十六進(jìn)制形式
  4. #  這是首選形式 n:n:n:n:n:n:n:n。每個 n 都表示八個 16 位地址元素之一的十六進(jìn)制值。例如:
  5. #  3FFE:FFFF:7654:FEDA:1245:BA98:3210:4562.
  6. #壓縮形式
  7. #  由于地址長度要求,地址包含由零組成的長字符串的情況十分常見。為了簡化對這些地址的寫入,
  8. #     可以使用壓縮形式,在這一壓縮形式中,多個 0 塊的單個連續(xù)序列由雙冒號符號 (::) 表示。此符號只能在地址中出現(xiàn)一
  9. #
  10. #次。例如,多路廣播地址 FFED:0:0:0:0:BA98:3210:4562 的壓縮形式為 FFED::BA98:3210:4562。
  11. #單播地址
  12. #3FFE:FFFF:0:0:8:800:20C4:0 的壓縮形式為 3FFE:FFFF::8:800:20C4:0。
  13. #環(huán)回地址 0:0:0:0:0:0:0:1 的壓縮形式為 ::1。
  14. #未指定的地址 0:0:0:0:0:0:0:0 的壓縮形式為 ::。
  15. #混合形式
  16. #  此形式組合 IPv4 和 IPv6 地址。在此情況下,地址格式為 n:n:n:n:n:n:d.d.d.d,
  17. #其中每個 n 都表示六個 IPv6 高序位 16 位地址元素之一的十六進(jìn)制值,每個 d 都表示 IPv4 地址的十進(jìn)制值。
  18. #@author yifangyou
  19. #@version gslb 2011-03-23

  20. @testIP=("1.1.1.1","255.255.255.255","1.-2.3.4","a.b.c.d","CDCD:910A:2222:5498:8475:1111:3900:2020","::","::g","F:F:F::1:1","F:F:10F::","::F:F:10F","F:E:E:A:B:C:10.0.0.1","F:E:E:A:B:C:10.0.a.1","F::10.0.0.1","F:::10.0.0.1","::10.0.0.1");
  21. for my $ip (@testIP) {
  22.         my $result=isIP($ip);
  23.         if($result){
  24.                 print "[$ip] is ipv$result\n";
  25.         }else{
  26.                 print "[$ip] is not ip\n";
  27.         }
  28. }

  29. #計算CDCD:或者:2222的個數(shù)
  30. #@author yifangyou
  31. #@version gslb 2011-03-23
  32. #@return 0:表示沒有找到,>0表示替換了多少個
  33. sub cLength{
  34.         my $s= shift;
  35.   return  $s=~ s/([0-9a-f]{1,4}:)|(:[0-9a-f]{1,4})/ /gi;
  36. }

  37. #判斷ipv4格式
  38. #@author yifangyou
  39. #@version gslb 2011-03-23
  40. #@return 0:表示不是ip,4:表示ipv4,6:表示ipv6
  41. sub isIP{
  42.         my $tmpstr=shift;
  43.         if(isIPv4($tmpstr)){
  44.                 return 4;
  45.         }
  46.         if(isIPv6($tmpstr)){
  47.                 return 6;       
  48.         }
  49.         return 0;
  50. }

  51. #判斷ipv4格式
  52. #@author yifangyou
  53. #@version gslb 2011-03-23
  54. #@return 0:表示不是ipv4,1:表示ipv4
  55. sub isIPv4
  56. {
  57.         my $tmpstr=shift;
  58.         if(@matches=$tmpstr=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/i)
  59.   {
  60.             if($matches[0]<=255 && $matches[1]<=255 &&$matches[2]<=255 && $matches[3]<=255){
  61.                                 return 1;
  62.                         }
  63.   }
  64.   return 0;
  65. }

  66. #判斷ipv6格式
  67. #@author yifangyou
  68. #@version gslb 2011-03-23        
  69. #@return 0:表示不是ipv6,1:表示ipv6
  70. sub isIPv6
  71. {
  72.           my $tmpstr=shift;
  73.           
  74. #                判斷CDCD:910A:2222:5498:8475:1111:3900:2020
  75.     if($tmpstr=~/^([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$/i){
  76.             return 1;
  77.     }
  78. #                判斷::
  79.     if($tmpstr=~/^::$/i){
  80.                     return 1;
  81.     }
  82. #                F:F:F::1:1  F:F:F:F:F::1  F::F:F:F:F:1格式   
  83.     if($tmpstr=~/^(([0-9a-f]{1,4}:){1,6})((:[0-9a-f]{1,4}){1,6})$/i){
  84.             my $c=cLength($tmpstr);
  85.             if($c>0 && $c<=7){
  86.                     return 1;
  87.             }
  88.     }
  89.                                                
  90. #                F:F:10F::
  91.     if($tmpstr=~/^([0-9a-f]{1,4}:){1,7}:$/i){
  92.             return 1;
  93.     }
  94.    
  95. #                ::F:F:10F
  96.     if($tmpstr=~/^:(:[0-9a-f]{1,4}){1,7}$/i){
  97.             return 1;
  98.     }
  99.                
  100. #                F:E:E:A:B:C:10.0.0.1格式
  101.                 if(@matches=$tmpstr=~/^([0-9a-f]{1,4}:){6}(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i){
  102.             if(isIPv4($matches[1])){
  103.                                 return 1;
  104.                         }
  105.     }

  106. #   F::10.0.0.1格式
  107.                 if(@matches=$tmpstr=~/^([0-9a-f]{1,4}:){1,5}:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i){
  108.             if(isIPv4($matches[1])){
  109.                                 return 1;
  110.                         }
  111.     }               
  112. #                ::10.0.0.1格式
  113.                 if(@matches=$tmpstr=~/^::(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i){
  114.             if(isIPv4($matches[0])){
  115.                                 return 1;
  116.                         }
  117.     }
  118.                 return 0;
  119. }
復(fù)制代碼

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
22 [報告]
發(fā)表于 2012-06-01 06:58 |只看該作者
回復(fù) 14# zooyo


牛的一B
話說當(dāng)年我的畢業(yè)設(shè)計也是一個IDS,其實就是從網(wǎng)上找個C源碼,然后在自己機器上調(diào)通,嘿嘿。

論壇徽章:
0
23 [報告]
發(fā)表于 2012-06-01 08:10 |只看該作者
回復(fù) 1# send_linux


1、在你的日常工作中會使用正則表達(dá)式解決什么樣的問題?
主要是處理日志這塊的,取出需要的數(shù)據(jù),再進(jìn)行后續(xù)處理的

2、正則表達(dá)式的用法在各個語言、腳本里面略有不同,你有什么學(xué)習(xí)經(jīng)驗可以分享給初學(xué)者?
目前只會寫shell,perl學(xué)習(xí)中,所以也沒什么可比較性,grep,sed,awk 的正則也略有不同,有時會寫混淆,這個有點糾結(jié),關(guān)鍵還是需要在工作中多運用,只看書是沒有用的,不運用的話看完書就忘記了

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
24 [報告]
發(fā)表于 2012-06-01 09:33 |只看該作者
回復(fù) 1# send_linux
頂!

正則表達(dá)式的優(yōu)劣,直接影響一個腳本語言的好壞

   

論壇徽章:
0
25 [報告]
發(fā)表于 2012-06-01 09:43 |只看該作者

隨著對bash sed awk  vim使用的熟悉
linux 的強大和 DIY樂趣 一步步 勝于學(xué)習(xí)的痛苦
昨天我把一個單詞文本格式化成了自己想要的樣式
這項工作拖拉了好久
完成時 有種厚積薄發(fā)的快感
正則表達(dá)式啊 像美酒 得慢慢品~

論壇徽章:
5
亥豬
日期:2013-10-15 13:41:04CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34申猴
日期:2013-10-28 10:55:45辰龍
日期:2013-10-31 13:29:29丑牛
日期:2014-02-14 11:25:54
26 [報告]
發(fā)表于 2012-06-01 10:19 |只看該作者
回復(fù) 16# xbokx


    算法還是用 普通的語言實現(xiàn)吧  C python 神馬的都行 用sed awk 搞太費勁了 且沒有必要

論壇徽章:
78
雙子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06獅子座
日期:2013-10-18 13:40:31雙子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56處女座
日期:2013-10-24 17:15:30雙子座
日期:2013-10-25 13:49:39午馬
日期:2013-10-28 15:02:15
27 [報告]
發(fā)表于 2012-06-01 11:32 |只看該作者
1、在你的日常工作中會使用正則表達(dá)式解決什么樣的問題?

處理各種數(shù)據(jù)格式問題

2、正則表達(dá)式的用法在各個語言、腳本里面略有不同,你有什么學(xué)習(xí)經(jīng)驗可以分享給初學(xué)者?

對perl的正則熟悉,其他如awk,grep等比較別扭,而且不同sh下規(guī)則也不大一樣。解決方法是復(fù)雜的盡量用perl來實現(xiàn),也很方便。

論壇徽章:
0
28 [報告]
發(fā)表于 2012-06-01 12:24 |只看該作者
1、在你的日常工作中會使用正則表達(dá)式解決什么樣的問題?
過濾日志,爬取網(wǎng)頁上的數(shù)據(jù),數(shù)據(jù)校驗等
2、正則表達(dá)式的用法在各個語言、腳本里面略有不同,你有什么學(xué)習(xí)經(jīng)驗可以分享給初學(xué)者?
不同的語言對正則的實現(xiàn)不一樣,這個比較糾結(jié),而且部分語言正則引擎,例如java存在性能問題,對于大量文本的處理,建議不要使用

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
29 [報告]
發(fā)表于 2012-06-01 14:11 |只看該作者
1、在你的日常工作中會使用正則表達(dá)式解決什么樣的問題?

主要用awk,sed和perl,進(jìn)行數(shù)據(jù)的提取,文本格式調(diào)整等,使用也相對比較簡單,很少會用太復(fù)雜的正則,主要考慮到效率問題,還要考慮代碼維護和可讀性。

2、正則表達(dá)式的用法在各個語言、腳本里面略有不同,你有什么學(xué)習(xí)經(jīng)驗可以分享給初學(xué)者?

只接觸過shell,awk,sed和perl的正則,別的語言不了解,個人比較推崇perl的正則,可以說”無所不能“,除了可以解決實際問題,更可以鍛煉一種正則思維。
個人覺得,awk和sed的組合基本上可以解決日常的工作需要,建議初學(xué)者可以先了解這兩種語言的正則,入門后再深入學(xué)習(xí)。

論壇徽章:
59
2015七夕節(jié)徽章
日期:2015-08-24 11:17:25ChinaUnix專家徽章
日期:2015-07-20 09:19:30每周論壇發(fā)貼之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38榮譽版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年紀(jì)念徽章
日期:2015-07-20 11:05:27IT運維版塊每日發(fā)帖之星
日期:2015-07-20 11:05:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:36程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-20 11:05:40數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:432015年辭舊歲徽章
日期:2015-07-20 11:05:44
30 [報告]
發(fā)表于 2012-06-01 14:18 |只看該作者
回復(fù) 15# zooyo


    不知道啊。反正我是正式提出不干版主的啊。沒什么意思,處理不討好啊。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP