中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [调查]看看都有哪些人会正则表达式
投票标题: [调查]看看都有哪些人会正则表达式  (单选) [参与投票的会员]
参与投票的会员:

yishanju   netbenton   freeants001   HAT   wxcute   不得不爱   lxh623   qiwei201   9zhmke   knoppix7   darkkid   hugreen   hongewuyan   313885174   lxb   qasa   gdyabc   wuxj   xiaoyong12   Climbing   feixiang   wseemed   BC   Cappuccin0   lisyofun   bd123456789   skywalker   jj65535   gggkiu   applecy   mangyuan   asp   heham   tempuser   zhr051916   welky   dnntgmfd   Pierre   oozic   xnine   ycz   NaturalJ0   irene6851   yangfengoo   weasel   diangongban   523066680   freecmd   baiyunheitu   tab   zxlxsqzy   wishpopo   hws888   ec2049   zhangwencheng   jfc2000   azraelno1   rs369007   jmz573515   jmxue   qfquan   pkto   zhwvip   wangyujonny   zhoucl   mfcliu   shifengl   lovelymorning   twfcc   weiboy   yyyyyyyyy   tongzj   caobei   wzf6688   406317577   ceii   isbmn   Evangel   flyzr   tslnyys   step2step   740011611   Hanyeguxing   dslz666   muercy   luhuiye   verycdsmoo   stance   pooloo   supoingo   xiaofei120   ytze   qinchun36   344611734   kaogushiguang   chishingchan   azziporah   defanive   greenappla   yhp1996   cai45212007   zouzhxi   wl00560   yovie   mxzenf   lincc0519   mwm5   b31b6t2t4   sfcctv   sx321sx   a9319751   jarry0932   pdanniel66   alonetan   honcho   zeroten   kingsams   bxbian951122   liu3157551   mxzenfyx   Lin7uan   sig13   heyouxian   su2353   chardos   fallenpal   gool123456   yywd   yonghu111  
会正则表达式,学PERL 的时候学的   6 (4.65%)
会正则表达式,学python 时学的   2 (1.55%)
会正则表达式,学PHP时学的   2 (1.55%)
会正则表达式,学ASP时学的   2 (1.55%)
会正则表达式,学批处理时学的   9 (6.98%)
会正则表达式,学VBS时学的   4 (3.10%)
会正则表达式,学C时学的   9 (6.98%)
会正则表达式,学习其它语言学的   16 (12.40%)
会正则表达式,通过其它途经学会的   9 (6.98%)
天资聪慧智商超人无师自通   2 (1.55%)
不会正则表达式,但想学。。。   26 (20.16%)
不会。   42 (32.56%)


« [1] [2] [3] [4] [5] [6] [7] »
作者:
标题: [调查]看看都有哪些人会正则表达式 上一主题 | 下一主题
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 61 楼』:  

楼上的直接无敌了。




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-5-28 02:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
twfcc
初级用户





积分 28
发帖 4
注册 2009-5-6
状态 离线
『第 62 楼』:  

perl , ruby 的會有更多的表達式 , 如 \d 代表數字, \s 空格等
gawk , egrep, bash 的是 extended Regular expression
sed, grep 用的是 basic regular expression ,意味 [0-9]+ 不能用,要這樣
[0-9][0-9]* 表達一個或以上的數字
我寫了從個[url]www.proxy4free.com[/url]取得代理url 的gawk簡單腳本, gnuwin32 gawk
用不到,只可用*nix 或 cygwin 跑, gnuwin32 gawk socket 功能給xp 廢了

#!/usr/bin/gawk -f
BEGIN{
     header="GET [url]http://www.proxy4free.com/page1.html[/url] HTTP/1.0\r\n\r\n \
             Connection: Keep-Alive\n\r\n\r \
             Accept: text/html\n\r\n\r \
             Accept-Charest: iso-8859-1, *, utf-8\n\r\n\r \
             Accept-Language: en, zh, ja\n\r\n\r \
             Host: [url]www.proxy4free.com:80[/url]\n\r\n\r \
             User-Agent: gawk_script/0.1a [en, zh] (Cygwin, NT)\n\r\n\r"
             host="www.proxy4free.com"
             remotehost="/inet/tcp/0/" host "/80"
             print header |& remotehost

             while ((remotehost |& getline) > 0){
                 if ($0 ~ /^<td>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+<\/td>$/){
                     gsub(/<[^>]+>/, "")
                     print $0
                } else if ($0 ~ /^<td>[0-9]+<\/td>$/){
                     gsub(/<[^>]+>/, "")
                     print $0
                } else if ($0 ~ /^<td>[A-Za-z]+<\/td>$/){
                     gsub(/<[^>]+>/, "")
                     print $0
                } else if ($0 ~ /^<td>^[A-Z][a-zA-Z]+[ \t]?[A-Z]*[A-Za-z]*<\/td>$/){
                     gsub(/<[^>]+>/, "")
                     print $0
                } else if ($0 ~ /^<td>20[0-1][0-9]-0?[1-9]+-0?[0-9]+<\/td>$/){
                     gsub(/<[^>]+>/, "")
                     print $0
                     printf("\n----------------\n")
                } else {
                    continue
                }
             }
       close(remotehost)
}

還有三個用gawk, bash, perl 寫的香港六合彩小腳本,也用上了一些RE

#! /bin/bash
# marksix genertor, Usage: $0 [ [option] argument ]

output=""
base_array=({1..49})
length=${#base_array[@]}
argument=$1
howmany=${argument:-6}
usage="Usage:\t${0##*/} [[option] number of picks](default 6)"
message_to_user="Number of picks should not be greater than $length"
out_of_range=66
non_numberic_argument=65

  if [[ $howmany =~ [^0-9]+ ]]
    then
      echo -e "$usage" >&2 ; exit $non_numberic_argument
  elif [ $howmany -gt $length ]
    then
      echo "$message_to_user" >&2 ; exit $out_of_range
  fi

  for (( i=1 ; i<=howmany ; i++ ))
    do
      pick=${base_array[$(( RANDOM % length ))]}
      output="$output $pick"
      resize_array=($(echo ${base_array[@]} | sed "s/\<$pick\>//"))
      base_array=(${resize_array[@]})
      length=${#base_array[@]}
    done

  sort_result=$( printf '%s\n' $output | sort -n )
  echo -e ${sort_result//\n/" "}

gawk version

#! /usr/bin/gawk -f
BEGIN{
    howmany=ARGV[1]
    output=""
    base="1,2,3,4,5,6,7,8,9,10,"
    base=base "11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,"
    base=base "31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49"
    usage="Usage:\t  marksix.awk [number](default 6)"
    n=split(base, arr, ",")
       if ( howmany ~ /[^0-9]+/ || howmany > n ){
           print usage > "/dev/stderr"
           exit 5
       } else if ( howmany == "" ){
           howmany=6
       }
       srand()
       for (i=1; i<=howmany; i++){
           randnum=int(rand() * n * howmany) % n + 1
           pick=arr[randnum]
           output=output " " pick
           delete arr[randnum]
           n=asort(arr)
       }
       {
           sorted=""
           split(output, a, " ")
           z=asort(a, out)
           for (i=1; i<=z; i++){
               sorted=sorted " " out[i]
           }
           sub(/^ /, "", sorted)
           print sorted
       }

}

perl version

#! /usr/bin/perl
# marksix generator, perl version


@num=qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
        23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
        42 43 44 45 46 47 48 49) ;
$length=@num ;
$output="" ;
$howmany=$ARGV[0] ;
$i=1 ;
  
  die "Number of picks should not be greater than $length\n" if ($howmany > $length) ;
  die "Usage:\t$0 [[option]number of picks](default 6)\n" if ($howmany =~ /\D+/) ;
  $howmany = 6 if (@ARGV == 0) ;

  while ($i <= $howmany){
    srand ;
    $random=int(rand() * $length * $i) % $length ;
    $pick=$num[$random] ;
    $output="$output $pick" ;
    splice (@num, $random, 1) ;
    $length=@num ;
    $i++ ;
  }
  @out=split(" ", $output) ;
  @sorted=sort {$a <=> $b} @out ;
  print "@sorted\n"

還有一個給linux `free' cygwin 代替品, 也用上一些ruby 的re

$ cat bin/free
#! /usr/bin/ruby
# roustic free for cygwin, ruby version

  class PrintHeader
    def initialize(i="total", j="used", k="free")
      @a = i
      @b = j
      @c = k
    end
    def header
      print "\t", @a, "\t", @b, "\t", @c, "\n"
    end
  end
  n = PrintHeader.new("總數", "已用", "剩餘")
  n.header

  filename = "/proc/meminfo"
  file = open(filename)
      
    while text = file.gets
      if text =~ /Mem:|Swap:/
        str = [ text.split(/\s+/) ]
        step = 1024 * 1024
          str.each { |i|
            j = i[0]
            a = i[1].to_i / step.to_i
            b = i[2].to_i / step.to_i
            c = i[3].to_i / step.to_i
            print j, "\t", a," M", "\t", b," M", "\t", c," M", "\n"
           }
        end
      end

   file.close

我不是顯擺,只是證明我沒有胡吹,當然我寫程序還是不入流, 但那幾種RE
還是會一點點皮毛

在win32 用findstr 就可學 basic regular expression , 因為我不會批次檔,
findstr 不怎麼用,但它的BRE 大至上就是gnu grep 的BRE,

   此帖被 +15 点积分         点击查看详情   
评分人:【 yishanju 分数: +15  时间:2009-5-28 06:47


2009-5-28 06:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
twfcc
初级用户





积分 28
发帖 4
注册 2009-5-6
状态 离线
『第 63 楼』:  

re 有什麼用?相當好用
http://www.bathome.cn/thread-4615-1-1.html
有一個這樣的問題,機本用 RE 就可以了

User@User-PC ~
$ cat sometxt
SDI_cad12_k010002_dft_a2.prt
SDI_k010003_dft_a3_sht.prt
SDI_cad12_k010004_dft_a2_sht.prt

$ sed 's/\(SDI_.*\)\(k[0-9][0-9]*_dft\)\(.*\)\(\..*\)$/\2\4/' sometxt
k010002_dft.prt
k010003_dft.prt
k010004_dft.prt


那些腳本語言只要懂得 RE 就可對文本自動編輯,

2009-5-28 07:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yyyyyyyyy
初级用户





积分 137
发帖 85
注册 2007-11-26
状态 离线
『第 64 楼』:  

还在研究中。。。

   此帖被 +9 点积分       点击查看详情   
评分人:【 yishanju 分数: +9  时间:2009-5-29 03:35


2009-5-28 23:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 65 楼』:  



  Quote:
Originally posted by twfcc at 2009-5-28 07:04:
re 有什麼用?相當好用
http://www.bathome.cn/thread-4615-1-1.html
有一個這樣的問題,機本用 RE 就可以了

User@User-PC ~
$ cat sometxt
SDI_cad12_k010002_dft_a2.prt
SDI_k ...

用正则处理文本感觉真的很爽,如鱼得水。
WINDOWS 下有支持正则查找替换的FR http://baiy.cn/utils/fr/index.htm
非常的好用。




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-5-29 03:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
twfcc
初级用户





积分 28
发帖 4
注册 2009-5-6
状态 离线
『第 66 楼』:  

上面那個問題,如果以 bash3.X 的正規表示式來做,
就是延伸正規表示式(extended regular expression)
大約是這樣
nc10@your-5554c55be4 ~
$ cat sometxt
SDI_cad12_k010002_dft_a2.prt
SDI_k010003_dft_a3_sht.prt
SDI_cad12_k010004_dft_a2_sht.prt

nc10@your-5554c55be4 ~
$ cat bash_re
#! /bin/bash
while IFS= read -r
    do
        [[ "$REPLY" =~ ([A-Z]{3}_.*)([a-z][0-9]+_[a-z]{3})(_.*)(\..*) ]]
        out="${BASH_REMATCH[2]}${BASH_REMATCH[4]}"
        echo "$out"
    done < "$*"
nc10@your-5554c55be4 ~
$ sh bash_re sometxt
k010002_dft.prt
k010003_dft.prt
k010004_dft.prt

nc10@your-5554c55be4 ~
$

跟 sed 一樣可以用 group(組?); sed 以 \1 \2 ...\9 作為 backreference,
表示符合條件 的group(組?); bash 以默認數組($BASH_REMATCH)作配對符合條件的部份, perl 以 $1 $2..... 等, gnu 軟件的 RE 還有 \`, \' , \w, \W , \b ... 等

正規表示式差不多是一門語言,但學會就非常好用,大多數的腳本語言
都會支援它,^_^, 如果未學的版友,花點時間學上它,我保證你不會後悔
呵呵,我也只會點皮毛

2009-5-29 11:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
406317577
初级用户





积分 98
发帖 45
注册 2008-8-30
状态 离线
『第 67 楼』:  

可怜啊..太复杂了..殊不知从何下手

   此帖被 +9 点积分       点击查看详情   
评分人:【 yishanju 分数: +9  时间:2009-5-30 08:35


2009-5-29 18:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ceii
初级用户





积分 115
发帖 45
注册 2007-3-3
状态 离线
『第 68 楼』:  

我的正则表达式学习过程:
  2003年底架设apach服务时,因为想过滤网址,于是查看手册,第一次接触正则表达式这个词,并马上学会了“^”字符的用法,手册里介绍正则表达式只有十几行,看了一下,又学会了“*”和“+”的用法,当时我并不知道我接触的是大名鼎鼎的正则表达式,只把它当成类似于DOS命令中的通配符已。
  直到两年后,使用UltraEdit编辑文件时,偶然发现它的“查找替换”有正则表达式选项,尝试使用一下,发现查找到的字串非常符合我的想法,我对正则表达式开始有点兴趣了,上网搜索支持正则表达式的编辑器,最后锁定vim,知道正则表达式的功能比预想的强大得多,又上网搜索支持正则表达式的任何软件,这样我认识了grep、sed和awk,在这几个命令行小工具里,我终于见识了正则表达式的超强功能,有相见恨晚的感觉。当知道这些都是来源于Linux以后,我对Linux非常偏爱,专门安装了Linux,学了很多Linux命令。
  随着了解的深入,发现越来越多的工具支持正则表达式,最令我意外的是,自己一直使用了两三年的php和MySQL,还有JavaScript竟然也支持正则表达式。
  现在,我使用正则表达式最多的工具是sed和vim。

   此帖被 +15 点积分         点击查看详情   
评分人:【 yishanju 分数: +15  时间:2009-5-30 08:35


2009-5-30 06:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 69 楼』:  



  Quote:
Originally posted by 406317577 at 2009-5-29 18:57:
可怜啊..太复杂了..殊不知从何下手

其实很简单的,正则表达式就是一种描述字符串规律表达方式。
各种程序语言里大都支持正则表达式(各种语言的正则表达式写法可能稍有差异),很多文字编辑工具也都支持。

学会一门编程语言的基本语法,网上找个教程,就可以开学习正则表达式了
或者找一个支持正则表达式的命令行工具,比如像FR SED AWK GAWK等等。

只用WINDOWS的用户我推荐FR,FR 是一个正则查找替换工具,非常简单好用,我自己一直在用的
FR 下载:http://baiy.cn/utils/fr/index.htm




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-5-30 08:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Evangel
初级用户





积分 145
发帖 95
注册 2008-4-12
状态 离线
『第 70 楼』:  

很想知道,c语言有正则么?还没有学到……

   此帖被 +9 点积分       点击查看详情   
评分人:【 yishanju 分数: +9  时间:2009-5-31 10:49


2009-5-31 05:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dnntgmfd
初级用户





积分 85
发帖 52
注册 2009-1-10
来自 湘乡
状态 离线
『第 71 楼』:  

#include <iostream.h>
void main()
{
  int a=0,b=0;
for(a=0,a++,a<100)
  b=b+1;
cout<<b<<endl;
}
好久没用了,也不知道对了没有,
另外这算不算是这规表达式呢?

   此帖被 +9 点积分       点击查看详情   
评分人:【 yishanju 分数: +9  时间:2009-5-31 10:49


2009-5-31 10:39
查看资料  发送邮件  发短消息 网志  OICQ (527385656)  编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 72 楼』:  



  Quote:
Originally posted by Evangel at 2009-5-31 05:59:
很想知道,c语言有正则么?还没有学到……

不懂C,不过应该可以下载到相应的函数库

正则表达式主要用来处理字符串,所以看看C处理字符串看看,




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-5-31 10:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 73 楼』:  

继续C中正则表达式的使用  http://blog.chinaunix.net/u2/67187/showart.php?id=653481




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-5-31 10:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 74 楼』:  



  Quote:
Originally posted by dnntgmfd at 2009-5-31 10:39:
#include <iostream.h>
void main()
{
  int a=0,b=0;
for(a=0,a++,a<100)
  b=b+1;
cout<<b<<endl;
}
好久没用了,也不知道对了没有,
另外这算不算是这规表达式呢?

明显不是
百度一下正则表达式的概念。。。
正则表达式是一种神奇伟大美好。。。的东西




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-5-31 10:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tslnyys
初级用户




积分 29
发帖 17
注册 2009-6-2
状态 离线
『第 75 楼』:  

我也想,这是我的处女帖。

   此帖被 +9 点积分       点击查看详情   
评分人:【 yishanju 分数: +9  时间:2009-6-3 00:56


2009-6-2 23:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] [7] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: