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

  免費注冊 查看新帖 |

Chinaunix

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

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

論壇徽章:
0
91 [報告]
發(fā)表于 2012-06-13 21:52 |只看該作者
大家好,我是《正則指引》的作者余晟,抱歉來晚了,看大家討論熱火朝天,我先瀏覽一遍,再和各位討論。

論壇徽章:
0
92 [報告]
發(fā)表于 2012-06-13 22:32 |只看該作者
1、在你的日常工作中會使用正則表達式解決什么樣的問題?
我用到的都是在實際場景下,正則只是其中的一點。
a) 以前公司的產(chǎn)品在處理日志時,需要匹配日志,解析日志中的變量,這個是最簡單的,用到的正則匹配工具Regular.exe、RegexBuddy.exe、Regex Match Tracer
  1. IDS事件:
  2. <82>IDSName:msensorgiga3;EventName:snmp_uservars:bad_commname;Count:1;SIP:10.28.3.99;1052;DIP:10.28.47.17;161;Time:2005-03-18 03:50:51;Type:^ce^b4^d6^aa;Severity:^d6^d0^b7^e7^cf^d5;Bad SNMP community name from 10.28.3.99 to 10.28.47.17
  3. <82>IDSName:msensorgiga3;EventName:dns_labels:binary;Count:1;SIP:10.28.8.100;15000;DIP:210.22.14.9;53;Time:2005-03-18 03:50:31;Type:^b9^a5^bb^f7;Severity:^d6^d0^b7^e7^cf^d5;10.28.8.100 -> 210.22.14.9 id 14080 DNS label contains binary data
  4. <82>IDSName:msensorgiga3;EventName:www2_uservars:unsafe_method;Count:1;SIP:10.28.70.7;4862;DIP:10.0.241.102;80;Time:2005-03-18 03:50:22;Type:^b9^a5^bb^f7;Severity:^d6^d0^b7^e7^cf^d5;10.28.70.7 -> 10.0.241.102: Unsafe method seen: POLL
  5. <82>IDSName:msensorgiga3;EventName:tftp_opcode;Count:1;SIP:10.28.7.96;15000;DIP:221.214.148.244;69;Time:2005-03-21 17:26:40;Type:探測;Severity:中風險;10.28.7.96 -> 221.214.148.244: Suspicious opcode in TFTP transfer
  6. <82>IDSName:msensorgiga3-4507;EventName:tftp_opcode;Count:1;SIP:10.28.4.154;57777;DIP:211.244.33.95;69;Time:2005-04-03 20:22:02;Type:探測;Severity:中風險;10.28.4.154 -> 211.244.33.95: Suspicious opcode in TFTP transfer
  7. <82>IDSName:Sensor-B;EventName:snmp_uservars:bad_commname;Count:1;SIP:132.194.68.102;60856;DIP:10.28.68.121;161;Time:2007-03-21 18:44:14;Type:未知;Severity:中風險;Bad SNMP community name from 132.194.68.102 to 10.28.68.121
  8. 判別規(guī)則:
  9. <\d+>IDSName:([^;]+);EventName:([^:]+):([^;]+);Count:(\d+);SIP:([^;]+);(\d+);DIP:([^;]+);(\d+);Time:([^;]+);Type:([^;]+);Severity:([^;]+);([^;]+)
  10. <\d+>IDSName:([^;]+);EventName:([^;]+);Count:(\d+);SIP:([^;]+);(\d+);DIP:([^;]+);(\d+);Time:([^;]+);Type:([^;]+);Severity:([^;]+);([^;]+)
復(fù)制代碼
b) 自定義unix系統(tǒng)登錄日志,其中需要獲取登錄用戶名、IP等信息時,也只是簡單的使用cut、grep、awk等。嘿嘿,不過以下代碼的完整文檔可是我的心血。感興趣的兄弟自行研究。
  1. # Add content in /etc/profile
  2. # Log "bash sh ksh" user login and command history
  3. up_client_ip=`(who am i|cut -d\( -f2|cut -d\) -f1)`
  4. if ( test -z "`echo $up_client_ip|awk '($1 ~/[0-9]+.[0-9]+.[0-9]+.[0-9]+/)'`" )
  5. then
  6. up_client_ip=`awk '/'$up_client_ip'/ {print $1}'  /etc/hosts`
  7. fi
  8. up_nowtime=`(date +"%Y-%m-%d %T")`
  9. logger -p user.notice -- class=\"HOST_LOGIN\" type=\"2\" time=\"$up_nowtime\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.100.90\" primary_user=\"\" secondary_user=\"`id|cut -d\( -f2|cut -d\) -f1`\" operation=\"\" content=\"login successful\" authen_status=\"Success\" log_level=\"1\" session_id=\"$$\" 2>/dev/null
  10. case "$0" in
  11. -bash)
  12.         export PROMPT_COMMAND='logger -p user.notice -- class=\"HOST_COMMAND\" type=\"3\" time=\"`date +"%Y-%m-%d %T"`\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.100.90\" primary_user=\"\" secondary_user=\"`id|cut -d\( -f2|cut -d\) -f1`\" operation=\"$(history 1 | { read x y; echo $y; })\" content=\"command\" authen_status=\"\" log_level=\"1\" session_id=\"$$\" 2>/dev/null;'
  13.         ;;
  14. -ksh)
  15. function log2syslog
  16. {
  17.                 logger -p user.notice -- class=\"HOST_COMMAND\" type=\"3\" time=\"`date +"%Y-%m-%d %T"`\" src_ip=\"$up_client_ip\" dst_ip=\"192.168.100.90\" primary_user=\"\" secondary_user=\"`id|cut -d\( -f2|cut -d\) -f1`\" operation=\"`fc -ln -0`\" content=\"command\" authen_status=\"\" log_level=\"1\" session_id=\"$$\" 2>/dev/null;
  18. }
  19.         trap log2syslog DEBUG;
  20.         ;;
  21. esac
  22. readonly up_client_ip
  23. readonly up_nowtime
  24. readonly PROMPT_COMMAND
復(fù)制代碼
c) 公司要分析統(tǒng)計WEB日志中一些攻擊行為,然后就有了這么一個腳本。說明下,WEB日志是以IP為目錄,目錄下存放日志文件,日志文件名中包含日期。keywords文件定義關(guān)鍵字,server_ip定義要分析的WEB日志IP。
  1. logdir=/var/log/netscaler
  2. analysedir=/var/www/html/seclog
  3. yesterday=`(date -d yesterday +"%Y-%m-%d")`
  4. today=`(date +"%Y-%m-%d")`

  5. function LOG_ANALYSE
  6. {
  7. cd $analysedir
  8. echo $SERVER_IP
  9. if [ ! -d $SERVER_IP ];
  10.         then mkdir $SERVER_IP;
  11. fi
  12. if [ ! -d $SERVER_IP/$yesterday ];
  13.         then mkdir $SERVER_IP/$yesterday;
  14.         else rm -rf $SERVER_IP/$yesterday/*;
  15. fi
  16. for VALUE in `cat keywords |egrep -v "^$|^#"|awk -F"=" '{print $2}'`;
  17.     do
  18.         KEY=`grep "=$VALUE" keywords|egrep -v "^$|^#"|cut -d\= -f1`;
  19.         grep -i "$VALUE" $logdir/$SERVER_IP/*$yesterday.log* >>$SERVER_IP/$yesterday/"$SERVER_IP"_"$KEY".result;
  20. done
  21. cd $SERVER_IP/$yesterday/
  22. awk '{print $3"\t"$9}' *.result >>analyse_"$yesterday"
  23. #sed -r 's/.* (\S+) \S+ HTTP \S+ \S+ \S+ (\S+) .*/\1 \2/'*.result >>analyse_"$yesterday"
  24. echo "url                                獨立IP數(shù)                       pv">>count_"$yesterday"
  25. echo "--------------------------------------------------------------------">>count_"$yesterday"
  26. awk '{a[$2]++;if(!b[$2"_"$1]){b[$2"_"$1]=1;n[$2]++}}END{for(i in a) printf "%-45s %-20s %s\n",i,n[i],a[i]}' analyse_"$yesterday" | sort -k3n >>count_"$yesterday"
  27. echo "IP                                 訪問URL數(shù)                   次數(shù)">>count_"$yesterday"
  28. echo "--------------------------------------------------------------------">>count_"$yesterday"
  29. awk '{a[$1]++;if(!b[$1"_"$2]){b[$1"_"$2]=1;n[$1]++}}END{for(i in a) printf "%-45s %-20s %s\n",i,n[i],a[i]}' analyse_"$yesterday" | sort -k3n >>count_"$yesterday"
  30. cd $analysedir
  31. }
  32. for SERVER_IP in `cat $analysedir/server_ip|egrep -v "^$|^#"`;
  33.     do LOG_ANALYSE;
  34. done
  35. cd $analysedir
  36. cat /dev/null >$analysedir/analyse_"$yesterday"_all
  37. cat /dev/null >$analysedir/count_"$yesterday"_all
  38. for SERVER_IP in `cat $analysedir/server_ip|egrep -v "^$|^#"`;
  39.     do cat $analysedir/$SERVER_IP/$yesterday/analyse_"$yesterday" >>$analysedir/analyse_"$yesterday"_all;
  40. done
  41. echo "url                                獨立IP數(shù)                       pv">>$analysedir/count_"$yesterday"_all
  42. echo "--------------------------------------------------------------------">>$analysedir/count_"$yesterday"_all
  43. awk '{a[$2]++;if(!b[$2"_"$1]){b[$2"_"$1]=1;n[$2]++}}END{for(i in a) printf "%-45s %-20s %s\n",i,n[i],a[i]}' analyse_"$yesterday"_all | sort -k3n >>$analysedir/count_"$yesterday"_all
  44. echo "IP                                 訪問URL數(shù)                   次數(shù)">>$analysedir/count_"$yesterday"_all
  45. echo "--------------------------------------------------------------------">>count_"$yesterday"_all
  46. awk '{a[$1]++;if(!b[$1"_"$2]){b[$1"_"$2]=1;n[$1]++}}END{for(i in a) printf "%-45s %-20s %s\n",i,n[i],a[i]}' analyse_"$yesterday"_all | sort -k3n >>$analysedir/count_"$yesterday"_all
復(fù)制代碼
d) 檢查日志中是否包括敏感信息,如信用卡號、身份證號等,寫了個簡單的腳本,就用grep、egrep。
  1. ####################################################
  2. echo "log contain ID Number:"
  3. echo "-------------------------------------------"
  4. egrep -a "\b[0-9]{6}[1|2][8|9|0][0-9]{2}0[1-9][0-3][0-9][0-9]{3}[0-9x]\b|\b[0-9]{6}[1|2][8|9|0][0-9]{2}1[0-2][0-3][0-9][0-9]{3}[0-9x]\b|\b[0-9]{6}[0-9]{2}0[1-9][0-9]{5}\b|\b[0-9]{6}[0-9]{2}1[0-2][0-9]{5}\b|持卡人證件號" */*
  5. echo
  6. echo
  7. ####################################################
  8. echo "log contain Credit card number:"
  9. echo "-------------------------------------------"
  10. #egrep  "4[0-9]{15}|4[0-9]{12}|5[1-5][0-9]{14}|6011[0-9]{12}|65[0-9]{14}|3[47][0-9]{13}|30[0-5][0-9]{11}|3[68][0-9]{12}|2131[0-9]{11}|1800[0-9]{11}|35[0-9]{3}[0-9]{11}" */*
  11. egrep -a  "\b4[0-9]{15}\b|\b4[0-9]{12}\b|\b5[1-5][0-9]{14}\b|\b6011[0-9]{12}\b|\b65[0-9]{14}\b|\b3[47][0-9]{13}\b|\b30[0-5][0-9]{11}\b|\b3[68][0-9]{12}\b|\b2131[0-9]{11}\b|\b1800[0-9]{11}\b|\b35[0-9]{3}[0-9]{11}\b|BankCardNumber" */*
  12. echo
  13. echo
  14. ####################################################
復(fù)制代碼
e) 檢查后門,這個用的網(wǎng)上現(xiàn)成的代碼。
  1. #!/usr/bin/python
  2. #-*- encoding:UTF-8 -*-
  3. ###
  4. ## @package
  5. ##
  6. ## @author      CFC4N   <cfc4nphp@gmail.com>
  7. ## @copyright   copyright (c) Www.cnxct.Com
  8. ## @Version     $Id: check_php_shell.py 37 2010-07-22 09:56:28Z cfc4n $
  9. ###
  10. import os
  11. import sys
  12. import re
  13. import time
  14. def listdir(dirs,liston='0'):
  15.     flog = open(os.getcwd()+"/check_php_shell.log","a+")
  16.     if not os.path.isdir(dirs):
  17.         print "directory %s is not exist"% (dirs)
  18.         return
  19.     lists = os.listdir(dirs)
  20.     for list in lists:
  21.         filepath = os.path.join(dirs,list)
  22.         if os.path.isdir(filepath):
  23.             if liston == '1':
  24.                 listdir(filepath,'1')
  25.         elif os.path.isfile(filepath):
  26.             filename = os.path.basename(filepath)
  27.             if re.search(r"\.(?:php|inc|html?)$", filename, re.IGNORECASE):
  28.                 i = 0
  29.                 iname = 0
  30.                 f = open(filepath)
  31.                 while f:
  32.                     file_contents = f.readline()
  33.                     if not file_contents:
  34.                         break
  35.                     i += 1
  36.                     match = re.search(r'''(?P<function>\b(?:include|require)(?:_once)?\b)\s*\(?\s*["'](?P<filename>[^;]*(?<!\.(?:php|inc)))["']\)?\s*''', file_contents, re.IGNORECASE| re.MULTILINE)
  37.                     if match:
  38.                         function = match.group("function")
  39.                         filename = match.group("filename")
  40.                         if iname == 0:
  41.                             info = '\n[%s] :\n'% (filepath)
  42.                         else:
  43.                             info = ''
  44.                         info += '\t|-- [%s] - [%s]  line [%d] \n'% (function,filename,i)
  45.                         flog.write(info)
  46.                         print info
  47.                         iname += 1
  48.                     match = re.search(r'\b(?P<function>eval|proc_open|popen|shell_exec|exec|passthru|system)\b\s*\(', file_contents, re.IGNORECASE| re.MULTILINE)
  49.                     if match:
  50.                         function = match.group("function")
  51.                         if iname == 0:
  52.                             info = '\n[%s] :\n'% (filepath)
  53.                         else:
  54.                             info = ''
  55.                         info += '\t|-- [%s]  line [%d] \n'% (function,i)
  56.                         flog.write(info)
  57.                         print info
  58.                         iname += 1
  59.                     match = re.search(r'(^|(?<=;|=))\s*`(?P<shell>[^`]+)`\s*;', file_contents, re.IGNORECASE)
  60.                     if match:
  61.                         shell = match.group("shell")
  62.                         if iname == 0:
  63.                             info = '\n[%s] :\n'% (filepath)
  64.                         else:
  65.                             info = ''
  66.                         info += '\t|-- [``] command is [%s] in line [%d] \n'% (shell,i)
  67.                         flog.write(info)
  68.                         print info
  69.                         iname += 1
  70.                 f.close()
  71.     flog.close()
  72. if '__main__' == __name__:
  73.     argvnum = len(sys.argv)
  74.     liston = '0'
  75.     if argvnum == 1:
  76.         action = os.path.basename(sys.argv[0])
  77.         print "Command is like:\n   %s D:\wwwroot\ \n   %s D:\wwwroot\ 1    -- recurse subfolders"% (action,action)
  78.         quit()
  79.     elif argvnum == 2:
  80.         path = os.path.realpath(sys.argv[1])
  81.         listdir(path,liston)
  82.     else:
  83.         liston = sys.argv[2]
  84.         path = os.path.realpath(sys.argv[1])
  85.         listdir(path,liston)
  86.     flog = open(os.getcwd()+"/check_php_shell.log","a+")
  87.     ISOTIMEFORMAT='%Y-%m-%d %X'
  88.     now_time = time.strftime(ISOTIMEFORMAT,time.localtime())
  89.     flog.write("\n----------------------%s checked ---------------------\n"% (now_time))
  90.     flog.close()
復(fù)制代碼
2、正則表達式的用法在各個語言、腳本里面略有不同,你有什么學習經(jīng)驗可以分享給初學者?
a) 入門看《正則表達式30分鐘入門教程》,看完基本的就會了,然后用我上面說的那幾個工具試試,很容易上手;
b) 要想了解的深,就得有相應(yīng)的場景使你可以去不斷的研究那些語法。比如在上面提到的日志匹配,在實際過程中用到比較多的有界定(通過什么來界定位置,比如\b)、零寬斷言、捕獲、單行、多行、不匹配大小寫等,這里就不詳細說了,大家用不到。
c) 不同語言中的正則表達式會有所不同,比如java、perl、shell中可以使用的都會有不同,這個看相應(yīng)的說明就行了。
d) 單純的學習正則表達式不難,更多的是結(jié)合其他語言來完成特定的任務(wù)。
e) 測試正則表達式的效率可以使用RegexBuddy.exe看詳細的匹配過程,匹配次數(shù)。一般來講能明確的就明確,比如改用\d{1,3}就不用.*等;能限定的就限定,比如\w{1,3}就不用\w+,等等。網(wǎng)上也有一些資料。
f) 最好有實際場景來解答,這樣才學得快。

論壇徽章:
24
15-16賽季CBA聯(lián)賽之北京
日期:2018-08-17 18:43:33技術(shù)圖書徽章
日期:2018-08-22 12:53:57技術(shù)圖書徽章
日期:2018-08-22 12:54:20技術(shù)圖書徽章
日期:2018-08-22 12:54:3015-16賽季CBA聯(lián)賽之福建
日期:2018-10-19 16:58:1619周年集字徽章-慶
日期:2019-08-27 13:28:5619周年集字徽章-19
日期:2019-08-27 13:31:2619周年集字徽章-19
日期:2019-08-27 13:31:2615-16賽季CBA聯(lián)賽之同曦
日期:2019-09-05 12:03:2819周年集字徽章-周
日期:2019-09-06 18:54:5415-16賽季CBA聯(lián)賽之上海
日期:2018-07-25 11:55:2615-16賽季CBA聯(lián)賽之青島
日期:2018-07-10 14:13:18
93 [報告]
發(fā)表于 2012-06-14 17:58 |只看該作者
可以說一切表達皆正則么? 正則告訴我們我們的表達都是有規(guī)律可循的,都符合一定的模式,通過正則匹配,我們可以找到我們想要的藏在茫;ヂ(lián)網(wǎng)中的一切東西,網(wǎng)頁抓取,數(shù)據(jù)整理,這都離不開正則

說得好。

論壇徽章:
49
15-16賽季CBA聯(lián)賽之福建
日期:2016-06-22 16:22:002015年亞洲杯之中國
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36雙魚座
日期:2015-01-02 22:04:33午馬
日期:2014-11-25 09:58:35辰龍
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龍
日期:2014-08-21 10:47:58
94 [報告]
發(fā)表于 2012-06-15 13:58 |只看該作者
yurii 發(fā)表于 2012-06-13 21:52
大家好,我是《正則指引》的作者余晟,抱歉來晚了,看大家討論熱火朝天,我先瀏覽一遍,再和各位討論。


余老師,神龍見首不見尾啊,呵呵,又不見啦

論壇徽章:
0
95 [報告]
發(fā)表于 2012-06-15 16:23 |只看該作者
支持

論壇徽章:
0
96 [報告]
發(fā)表于 2012-06-17 01:08 |只看該作者
本帖最后由 kingbigeast 于 2012-06-17 01:11 編輯

學習正則表達式是從余晟翻譯的《精通正則表達式》開始的,由于用vim的時發(fā)現(xiàn)很多時候都要用正則表達式。
從最基本的“錨點”、特殊符號,這些都是以前稍微明白一點的,而且不難上手。真正有意思的是在了解了諸如“匹配優(yōu)先”,“忽略優(yōu)先”,“固化分組”等等概念,還有不同引擎采用的不同思想:傳統(tǒng)的NFA就是非確定有窮狀態(tài)自動機,是表達式主導(dǎo)的,就是匹配的結(jié)果根據(jù)regex的增長而逐漸確定。而DFA是文本主導(dǎo)。每一次匹配,其實就是在文本空間做了一次搜索,不同的搜索策略的結(jié)果是一樣的,就像BFS和DFS。由于NFA是表達式主導(dǎo),所以表達式的質(zhì)量直接關(guān)系到搜索效率。
【以上基本是我讀書的心得。】
舉一些我現(xiàn)在能想到的例子:

在調(diào)試代碼的時候,會很頻繁地添加和注釋一些測試代碼。在vim中,可以用一些鍵綁定特定的regex來實現(xiàn):

  1. vmap <silent> <Leader>/ :s_^\(\s\)\?_\1//<CR>
  2. vmap <silent> <Leader>\ :s_^\(\s\)\?//_\1<CR>
復(fù)制代碼
以上是C++里的注釋和去注釋,把斜杠換成#也可以在shell腳本中使用。
vim里的正則應(yīng)該跟sed比較像,可能你注意到了,s替換的時候不是用/分隔的,而是下劃線,這個特性我首先在sed中遇到,當模式中含有斜杠的時候特別有用。

*nux下很多工具的輸出都是純文本的,就是為了方便處理。而處理文本的工具必須要用正則表達式。
例如我想知道自己的IP,并把它賦給一個變量,首先用ifconfig得到包含本機IP的信息字符串,然后用grep找到感興趣的行,最后用cut找到感興趣的域:

  1. $ifconfig eth0 | grep "inet addr" | cut -d: -f2 | cut -d" " -f1
復(fù)制代碼
當然這里并沒用到什么高級的技巧。但有時候這個功能很需要,比如要用ffmpeg截取屏幕視頻,要先知道窗口的坐標,xwininfo可以得到窗口信息,但要用grep或sed處理才能過濾出想要的結(jié)果。

再舉一個Shell里用regex的例子。比如現(xiàn)在一直一個絕對路徑,我要找到它的文件名和后綴名可以這樣:

  1. $filepath=/home/bigeast/Desktop/try/te.c
  2. $filename=${filepath##*/}                #now $filename is te.c
  3. $filetype=${filename##.}                #now $filetype is c
  4. $file=${filename%*.c}                        #now $file is te
復(fù)制代碼
兩個#代表從做向右找最長的匹配(匹配優(yōu)先),而一個%表示從右向左找最短的匹配(忽略優(yōu)先)。

時間不早了,暫且寫這么多,第一次上chinaunix,感覺氛圍還不錯。

論壇徽章:
1
技術(shù)圖書徽章
日期:2014-04-24 15:46:21
97 [報告]
發(fā)表于 2012-06-17 10:06 |只看該作者
1、在你的日常工作中會使用正則表達式解決什么樣的問題?
1 利用正則表達式解析用戶輸入的配置,或者配置文件里面的配置,
2 分析日志中的信息。
3 用戶輸入合法性的檢測。比如用戶輸入一個IP,你必須檢測用戶輸入的IP正確與否。

2、正則表達式的用法在各個語言、腳本里面略有不同,你有什么學習經(jīng)驗可以分享給初學者?
各種語言都有對正則表達式的支持,從我日常的C,Javascript,PHP, python,各種語言都支持正則表達式,
我們一向認為的不太適合解析字串的C也有對正則表達式的支持,但是C也有庫來支持這個正則表達式。筒子們可以自行
百度regexec,js比較方便,有 RegExp 對象。

學習正則表達式,首先要理解正則表達式的規(guī)則,至于各種語言對正則表達式的支持,理解了正則表達式,自然也就水到渠成了。

論壇徽章:
49
15-16賽季CBA聯(lián)賽之福建
日期:2016-06-22 16:22:002015年亞洲杯之中國
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36雙魚座
日期:2015-01-02 22:04:33午馬
日期:2014-11-25 09:58:35辰龍
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龍
日期:2014-08-21 10:47:58
98 [報告]
發(fā)表于 2012-06-17 12:12 |只看該作者
Bean_lee 發(fā)表于 2012-06-17 10:06
1、在你的日常工作中會使用正則表達式解決什么樣的問題?
1 利用正則表達式解析用戶輸入的配置,或者配置文 ...


真是個潛水牛人啊,呵呵

論壇徽章:
2
午馬
日期:2015-01-27 11:22:392015年辭舊歲徽章
日期:2015-03-03 16:54:15
99 [報告]
發(fā)表于 2012-06-18 11:02 |只看該作者
回復(fù) 101# kingbigeast


   
vim里的正則應(yīng)該跟sed比較像,可能你注意到了,s替換的時候不是用/分隔的,而是下劃線,這個特性我首先在sed中遇到,當模式中含有斜杠的時候特別有用。


  這邊就是sed, sed的分隔符 其實可以用任意非特殊字符~~~比如abc~~

  后面這個字符串用'##'截取字符串的話, 應(yīng)該是通配符"wildcard char",不算RE

論壇徽章:
0
100 [報告]
發(fā)表于 2012-06-18 16:02 |只看該作者
本帖最后由 kingbigeast 于 2012-06-18 16:03 編輯

回復(fù) 104# to407
  • 是可以是其它字符,我沒想說全,比如“?”,“|”,“.”,但非特殊字符我不明白,它們都是特殊字符啊。
  • 我不是很清楚通配符和正則表達式的區(qū)別,正則表達式里不是也有通配符么。而且這里的最長匹配和最短匹配應(yīng)該是正則表達式才有的概念吧。

寫得太匆忙,領(lǐng)教了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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