Find用法详解(含正则表达式)

Find用法详解(含正则表达式)
Find用法详解(含正则表达式)

Sed基础用法篇

刚开始接触linux,其实还是老实用vim来编辑文件,不过同样的过程重复多次,你就要想办法简化你的过程。sed绝对是一个好的命令或者工具,你不需要用vim打开文件就可以直接编辑(推荐掌握以下用法)。

1、删除行首空格

sed 's/^[ ]*//g' filename

sed 's/^ *//g' filename

sed 's/^[[:space:]]*//g' filename

2、行后和行前添加新行

行后:sed 's/pattern/&\n/g' filename

行前:sed 's/pattern/\n&/g' filename

&代表pattern

3、使用变量替换(使用双引号)

sed ‐e "s/$var1/$var2/g" filename

4、在第一行前插入文本

sed ‐i '1 i\插入字符串' filename

5、在最后一行插入

sed ‐i '$ a\插入字符串' filename

6、在匹配行前插入

sed ‐i '/pattern/ i "插入字符串"' filename

7、在匹配行后插入

sed ‐i '/pattern/ a "插入字符串"' filename

8、删除文本中空行和空格组成的行以及#号注释的行

grep ‐v ^# filename | sed /^[[:space:]]*$/d | sed /^$/d

9、要将目录/modules下面所有文件中的zhangsan都修改成list,可用如下命令:(注意备份原文件)

sed ‐i 's/zhangsan/list/g' `grep zhangsan ‐rl /modules`

Linux命令FIND详解

由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

一、find 命令格式

1、find命令的一般形式为;

find pathname ‐options [‐print ‐exec ‐ok ...]

2、find命令的参数;

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

‐print: find命令将匹配的文件输出到标准输出。

‐exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为

'command' { } \;,注意{ }和\;之间的空格。

‐ok: 和‐exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

3、find命令选项

‐name

按照文件名查找文件。

‐perm

按照文件权限来查找文件。

‐prune

使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用‐depth选项,那么‐prune将被find命令忽略。

‐user

按照文件属主来查找文件。

‐group

按照文件所属的组来查找文件。

‐mtime ‐n +n

按照文件的更改时间来查找文件, ‐ n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有‐atime和‐ctime 选项,但它们都和‐m time选项。

‐nogroup

查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。

‐nouser

查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。

‐newer file1 ! file2

查找更改时间比文件file1新但比文件file2旧的文件。

‐type

查找某一类型的文件,诸如:

b ‐ 块设备文件。

d ‐ 目录。

c ‐ 字符设备文件。

p ‐ 管道文件。

l ‐ 符号链接文件。

f ‐ 普通文件。

‐size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。

‐depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

‐fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。

‐mount:在查找文件时不跨越文件系统mount点。

‐follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

‐cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

另外,下面三个的区别:(amin,cmin,mmin以此类推)

‐atime n

查找系统中最后n*24小时访问的文件

‐ctime n

查找系统中最后n*24小时被改变文件状态的文件

‐mtime n

查找系统中最后n*24小时被改变文件数据的文件

4、使用exec或ok来执行shell命令

使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的

在有些操作系统中只允许‐exec选项执行诸如l s或ls ‐l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls 命令看一下,确认它们是所要删除的文件。

exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后

是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。

例如:为了用ls ‐l命令列出所匹配到的文件,可以把ls ‐l命令放在find命令的‐exec选项中

# find . ‐type f ‐exec ls ‐l { } \;

‐rw‐r‐‐r‐‐ 1 root root 34928 2003‐02‐25 ./conf/httpd.conf

‐rw‐r‐‐r‐‐ 1 root root 12959 2003‐02‐25 ./conf/magic

‐rw‐r‐‐r‐‐ 1 root root 180 2003‐02‐25 ./conf.d/README

上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在‐exec选项中使用ls ‐l 命令将它们列出。

在/logs目录中查找更改时间在5日以前的文件并删除它们:

$ find logs ‐type f ‐mtime +5 ‐exec rm { } \;

记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使

用诸如mv或rm命令时,可以使用‐exec选项的安全模式。它将在对每个匹配到的文件进

行操作之前提示你。

在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日

以上的文件,并删除它们,只不过在删除之前先给出提示。

$ find . ‐name "*.conf" ‐mtime +5 ‐ok rm { } \;

按y键删除文件,按n键不删除。

任何形式的命令都可以在‐exec选项中使用。

在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一

个sam用户。

# find /etc ‐name "passwd*" ‐exec grep "sam" { } \;

sam:x:501:501::/usr/sam:/bin/bash

二、find命令的例子;

1、查找当前用户主目录下的所有文件:

下面两种方法都可以使用

$ find $HOME ‐print

$ find ~ ‐print

2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权

限的文件;

$ find . ‐type f ‐perm 644 ‐exec ls ‐l { } \;

3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;

$ find / ‐type f ‐size 0 ‐exec ls ‐l { } \;

4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;

$ find /var/logs ‐type f ‐mtime +7 ‐ok rm { } \;

5、为了查找系统中所有属于root组的文件;

$find . ‐group root ‐exec ls ‐l { } \;

‐rw‐r‐‐r‐‐ 1 root root 595 10月 31 01:09 ./fie1

6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。

该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令

$ find . ‐name "admin.log[0‐9][0‐9][0‐9]" ‐atime ‐7 ‐ok rm { } \;

7、为了查找当前文件系统中的所有目录并排序;

$ find . ‐type d | sort

8、为了查找系统中所有的rmt磁带设备;

$ find /dev/rmt ‐print

三、xargs

xargs ‐ build and execute command lines from standard input

在使用find命令的‐exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传

递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行

几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这

就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像‐exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并

如此继续下去。

在有些系统中,使用‐exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并

非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性

能下降的问题,因而效率不高;

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中

相应的可调参数来确定。

来看看xargs命令是如何同find命令一起使用的,并给出一些例子。

下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类

文件

#find . ‐type f ‐print | xargs file

./.kde/Autostart/Autorun.desktop: UTF‐8 Unicode English text

./.kde/Autostart/.directory: ISO‐8859 text\

......

在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中: $ find / ‐name "core" ‐print | xargs echo "" >/tmp/core.log

上面这个执行太慢,我改成在当前目录下查找

#find . ‐name "file*" ‐print | xargs echo "" > /temp/core.log

# cat /temp/core.log

./file6

在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:

# ls ‐l

drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6

‐rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf

‐rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf

# find . ‐perm ‐7 ‐print | xargs chmod o‐w

# ls ‐l

drwxrwxr‐x 2 sam adm 4096 10月 30 20:14 file6

‐rwxrwxr‐x 2 sam adm 0 10月 31 01:01 http3.conf

‐rwxrwxr‐x 2 sam adm 0 10月 31 01:01 httpd.conf

用grep命令在所有的普通文件中搜索hostname这个词:

# find . ‐type f ‐print | xargs grep "hostname"

./httpd1.conf:# different IP addresses or hostnames and have them handled by the

./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames

on your

用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:

# find . ‐name \* ‐type f ‐print | xargs grep "hostnames"

./httpd1.conf:# different IP addresses or hostnames and have them handled by the

./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames

on your

注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。

find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

四、find 命令的参数

下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到

了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册

1、使用name选项

文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。

可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。

不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,

使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。

$ find ~ ‐name "*.txt" ‐print

想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用:

$ find . ‐name "*.txt" ‐print

想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:

$ find . ‐name "[A‐Z]*" ‐print

想要在/etc目录中查找文件名以host开头的文件,可以用:

$ find /etc ‐name "host*" ‐print

想要查找$HOME目录中的文件,可以用:

$ find ~ ‐name "*" ‐print 或find . ‐print

要想让系统高负荷运行,就从根目录开始查找所有的文件。

$ find / ‐name "*" ‐print

如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件:

$find . ‐name "[a‐z][a‐z][0‐‐9][0‐‐9].txt" ‐print

2、用perm选项

按照文件权限模式用‐perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限

表示法。

如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户

可以读、执行的文件,可以用:

$ find . ‐perm 755 ‐print

还有一种表达方法:在八进制数字前面要加一个横杠‐,表示都匹配,如‐007就相当于777,‐006相当于666

# ls ‐l

‐rwxrwxr‐x 2 sam adm 0 10月 31 01:01 http3.conf

‐rw‐rw‐rw‐ 1 sam adm 34890 10月 31 00:57 httpd1.conf

‐rwxrwxr‐x 2 sam adm 0 10月 31 01:01 httpd.conf

drw‐rw‐rw‐ 2 gem group 4096 10月 26 19:48 sam

‐rw‐rw‐rw‐ 1 root root 2792 10月 31 20:19 temp

# find . ‐perm 006

# find . ‐perm ‐006

./sam

./httpd1.conf

./temp

‐perm mode:文件许可正好符合mode

‐perm +mode:文件许可部分符合mode

‐perm ‐mode: 文件许可完全符合mode

3、忽略某个目录

如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那

么可以使用‐prune选项来指出需要忽略的目录。在使用‐prune选项时要当心,因为如果你

同时使用了‐depth选项,那么‐prune选项就会被find命令忽略。

如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:

$ find /apps ‐path "/apps/bin" ‐prune ‐o ‐print

4、使用find查找文件的时候怎么避开某个文件目录

比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件

find /usr/sam ‐path "/usr/sam/dir1" ‐prune ‐o ‐print

find [‐path ..] [expression] 在路径列表的后面的是表达式

‐path "/usr/sam" ‐prune ‐o ‐print 是 ‐path "/usr/sam" ‐a ‐prune ‐o

‐print 的简写表达式按顺序求值, ‐a 和 ‐o 都是短路求值,与 shell 的 && 和 || 类似如果 ‐path "/usr/sam" 为真,则求值 ‐prune , ‐prune 返回真,与逻辑表达式为真;否则不求值 ‐prune,与逻辑表达式为假。如果 ‐path "/usr/sam" ‐a ‐prune 为假,则求值 ‐print ,‐print返回真,

或逻辑表达式为真;否则不求值 ‐print,或逻辑表达式为真。

这个表达式组合特例可以用伪码写为

if ‐path "/usr/sam" then

‐prune

else

‐print

避开多个文件夹

find /usr/sam \( ‐path /usr/sam/dir1 ‐o ‐path /usr/sam/file1 \) ‐prune ‐o ‐print

圆括号表示表达式的结合。

\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。

查找某一确定文件,‐name等选项加在‐o 之后

#find /usr/sam \(‐path /usr/sam/dir1 ‐o ‐path /usr/sam/file1 \) ‐prune ‐o ‐name "temp" ‐print

5、使用user和nouser选项

按文件属主查找文件,如在$HOME目录中查找文件属主为sam的文件,可以用:

$ find ~ ‐user sam ‐print

在/etc目录下查找文件属主为uucp的文件:

$ find /etc ‐user uucp ‐print

为了查找属主帐户已经被删除的文件,可以使用‐nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用‐nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。

例如,希望在/home目录下查找所有的这类文件,可以用:

$ find /home ‐nouser ‐print

6、使用group和nogroup选项

就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:

$ find /apps ‐group gem ‐print

要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件

$ find / ‐nogroup‐print

7、按照更改时间或访问时间等查找文件

如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。

用减号‐来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。

希望在系统根目录下查找更改时间在5日以内的文件,可以用:

$ find / ‐mtime ‐5 ‐print

为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:

$ find /var/adm ‐mtime +3 ‐print

8、查找比某个文件新或旧的文件

如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用‐newer选项。它的一般形式为:

newest_file_name ! oldest_file_name

其中,!是逻辑非符号。

查找更改时间比文件sam新但比文件temp旧的文件:

例:有两个文件

‐rw‐r‐‐r‐‐ 1 sam adm 0 10月 31 01:07 fiel

‐rw‐rw‐rw‐ 1 sam adm 34890 10月 31 00:57 httpd1.conf

‐rwxrwxr‐x 2 sam adm 0 10月 31 01:01 httpd.conf

drw‐rw‐rw‐ 2 gem group 4096 10月 26 19:48 sam

‐rw‐rw‐rw‐ 1 root root 2792 10月 31 20:19 temp

# find ‐newer httpd1.conf ! ‐newer temp ‐ls

1077669 0 ‐rwxrwxr‐x 2 sam adm 0 10月 31 01:01 ./httpd.conf

1077671 4 ‐rw‐rw‐rw‐ 1 root root 2792 10月 31 20:19 ./temp

1077673 0 ‐rw‐r‐‐r‐‐ 1 sam adm 0 10月 31 01:07 ./fiel

查找更改时间在比temp文件新的文件:

$ find . ‐newer temp ‐print

9、使用type选项

在/etc目录下查找所有的目录,可以用:

$ find /etc ‐type d ‐print

在当前目录下查找除目录以外的所有类型的文件,可以用:

$ find . ! ‐type d ‐print

在/etc目录下查找所有的符号链接文件,可以用

$ find /etc ‐type l ‐print

10、使用size选项

可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。

在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。

在当前目录下查找文件长度大于1 M字节的文件:

$ find . ‐size +1000000c ‐print

在/home/apache目录下查找文件长度恰好为100字节的文件:

$ find /home/apache ‐size 100c ‐print

在当前目录下查找长度超过10块的文件(一块等于512字节):

$ find . ‐size +10 ‐print

11、使用depth选项

在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。

它将首先匹配所有的文件然后再进入子目录中查找。

$ find / ‐name "CON.FILE" ‐depth ‐print

12、使用mount选项

在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。

从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:

$ find . ‐name "*.XC" ‐mount ‐print

Excel_VBA实例教程_查找单元格

Excel VBA实例教程查找单元格 1、使用Find方法 在Excel中使用查找对话框可以查找工作表中特定内容的单元格,而在VBA中则使用Find方法,如下面的代码所示。 01.Sub RngFind() 02. Dim StrFind As String 03. Dim Rng As Range 04. StrFind = InputBox("请输入要查找的值:") 05. If Trim(StrFind) <> "" Then 06. With Sheet1.Range("A:A") 07. Set Rng = .Find(What:=StrFind, _ 08. After:=.Cells(.Cells.Count), _ 09. LookIn:=xlValues, _ 10. LookAt:=xlWhole, _ 11. SearchOrder:=xlByRows, _ 12. SearchDirection:=xlNext, _ 13. MatchCase:=False) 14. If Not Rng Is Nothing Then 15. Application.Goto Rng, True 16. Else 17. MsgBox "没有找到该单元格!" 18. End If 19. End With 20. End If 21.End Sub 代码解析: RngFind过程使用Find方法在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并查找该值所在的第一个单元格。 第6到第13行代码在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值。应用于Range 对象的Find方法在区域中查找特定信息,并返回Range对象,该对象代表用于查找信息的第一个单元格。如果未发现匹配单元格,就返回Nothing,语法如下: 01.expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat) 复制代码参数expression是必需的,该表达式返回一个Range对象。 参数What是必需的,要搜索的数据,可为字符串或任意数据类型。 参数After是可选的,表示搜索过程将从其之后开始进行的单元格,必须是区域中的单个单元格。查找时是从该单元格之后开始的,直到本方法绕回到指定的单元格时,才对其进行搜索。如果未指定本参数,搜索将从区域的左上角单元格之后开始。 在本例中将After参数设置为A列的最后一个单元格,所以查找时从A1单元格开始搜索。 参数LookIn是可选的,信息类型。 参数LookAt是可选的,可为XlLookAt常量的xlWhole 或xlPart之一。 参数SearchOrder是可选的,可为XlSearchOrder常量的xlByRows或xlByColumns之一。 参数SearchDirection是可选的,搜索的方向,可为XlSearchDirection常量的xlNext或xlPrevious 之一。

正则表达式语法完整版

正则表达式基础知识 一个正则表达式就是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

下面看几个例子: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的字符串。 '*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。下面是几个例子: "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。 也可以使用范围,用大括号括起,用以表示重复次数的范围。 "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。 还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。 还有一个'|',表示“或”操作: "hi|hello":表示一个字符串里有"hi"或者"hello"; "(b|cd)ef":表示"bef"或"cdef"; "(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c"; '.'可以替代任何字符: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符); 方括号表示某些字符允许在一个字符串中的某一特定位置出现: "[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b"); "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者"[abcd]");"^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; "[0-9]+":表示一个以上的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。 你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。 为了逐字表达,必须在"^.$()|*+?{\"这些字符前加上转移字符'\'。 请注意在方括号中,不需要转义字符。

FindWindow函数详解

C#中使用FindWindow函数详解 FindWindow 用来根据类名和窗口名来得到窗口句柄的。但是这个函数不能查找子窗口,也不区分大小写。 如果要从一个窗口的子窗口中查找需要使用FindWindowEX。 1.在C#中使用方法如下: [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtr FindWindow(string lpClassName,string lpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtr FindWindow(string lpClassName,string lpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName); 2. 实例参考: IntPtr hWnd = FindWindow(null, "test Demo"); 这样会查找所有title是"test Demo"的窗口。 参考下面的资料解释 3. FindWindow参数详解: Parameters lpClassName [in] Pointer to a null-terminated string that specifies the class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be in the low-order word of lpClassName; the high-order word must be zero. If lpClassName points to a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names.

VC正则表达式的使用

VC正则表达式的使用 2010年9月11日星期六邵盛松 正则表达式是一种对字符进行模糊匹配的一个公式。在数据有效性验证,查找,替换文本中都可以使用正则表达式。 本篇文章主要描述的是使用ATL中两个模板类CAtlRegExp和CAtlREMatchContext。 在使用CAtlRegExp类之前需要添加#include 这个头文件。 RegExp是Regular Expression的缩写 以匹配邮件地址字符串为例说明两个类的使用 该示例更改自https://www.360docs.net/doc/1013514046.html,/en-us/library/k3zs4axe(VS.80).aspx CString strRegex=L"({[0-9_]+@[a-zA-Z0-9]+[.][a-zA-Z0-9]+[.]?[a-zA-Z0-9]+})"; CString strInput; strInput=L"admin@https://www.360docs.net/doc/1013514046.html,"; CAtlRegExp reRule; wchar_t *wt = (wchar_t *)(LPCTSTR)strRegex; REParseError status = reRule.Parse((const ATL::CAtlRegExp::RECHAR *)wt); if (REPARSE_ERROR_OK != status) { return 0; } CAtlREMatchContext mcRule; wt = (wchar_t *)(LPCTSTR)strInput; if (!reRule.Match((const ATL::CAtlRegExp::RECHAR *)wt,&mcRule)) { AfxMessageBox(L"您输入的邮件地址不合法!"); } else { for (UINT nGroupIndex = 0; nGroupIndex < mcRule.m_uNumGroups; ++nGroupIndex) { const CAtlREMatchContext<>::RECHAR* szStart = 0;

Findbugs使用简介

Findbugs使用简介 Findbugs是一个在java程序中查找bug的程序,它查找bug模式的实例,也就是可能出错的代码实例,注意Findbugs是检查java字节码,也就是*.class文件。其实准确的说,它是寻找代码缺陷的,很多我们写的不好的地方,可以优化的地方,它都能检查出来。例如:未关闭的数据库连接,缺少必要的null check,多余的null check,多余的if后置条件,相同的条件分支,重复的代码块,错误的使用了"==",建议使用StringBuffer代替字符串连加等等。而且我们还可以自己配置检查规则(做哪些检查,不做哪些检查),也可以自己来实现独有的校验规则(用户自定义特定的bug模式需要继承它的接口,编写自己的校验类,属于高级技巧)。 Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。 Bad practice 坏的实践 一些不好的实践,下面列举几个: HE:类定义了equals(),却没有hashCode();或类定义了equals(),却使用 Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。 SQL:Statement 的execute方法调用了非常量的字符串;或Prepared Statement是由一个非常量的字符串产生。 DE:方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。 Correctness 一般的正确性问题 可能导致错误的代码,下面列举几个:

Linux find命令常见用法汇总

Linux find命令常见用法汇总 导读:Linux系统中查找文件的命令式find,find命令具有强大的功能,能够提供多种查找条件,下面小编就给大家带来Linux中find命令的常见用法汇总,一起来学习下吧。 ·find path -option [-print ][-exec -ok command ]{} \; find命令的参数; pathname:find命令所查找的目录路径。例如用。来表示当前目录,用/来表示系统根目录。 -print:find命令将匹配的文件输出到标准输出。 -exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command’ { } \;,注意{ }和\;之间的空格。 -ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 #-print 将查找到的文件输出到标准输出 #-exec command {} \; —–将查到的文件执行command操作,{} 和\;之间有空格 #-ok 和-exec相同,只不过在操作前要询用户 例:find 。-name .svn | xargs rm -rf ==================================================== -name filename #查找名为filename的文件 -perm #按执行权限来查找 -user username #按文件属主来查找

-group groupname #按组来查找 -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前-atime -n +n #按文件访问时间来查GIN:0px“》 -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在 -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存 -newer f1 !f2 找文件,-n指n天以内,+n指n天以前 -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在 -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存 -newer f1 !f2 #查更改时间比f1新但比f2旧的文件 -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件 -size n[c]#查长度为n块[或n字节]的文件 -depth #使查找在进入子目录前先行查找完本目录 -fstype #查更改时间比f1新但比f2旧的文件 -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件 -size n[c]#查长度为n块[或n字节]的文件 -depth #使查找在进入子目录前先行查找完本目录 -fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可在/etc/fstab中找到 -mount #查文件时不跨越文件系统mount点 -follow #如果遇到符号链接文件,就跟踪链接所指的文件 -cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可在/etc/fstab中找到 -mount #查文件时不跨越文件系统mount点 -follow #如果遇到符号链接文件,就跟踪链接所指的文件 -cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中 -prune #忽略某个目录 ===================================================== $find ~ -name ”*.txt“ -print #在$HOME中查.txt文件并显示 $find 。-name ”*.txt“ -print $find 。-name ”[A-Z]*“ -print #查以大写字母开头的文件 $find /etc -name ”host*“ -print #查以host开头的文件 $find 。-name ”[a-z][a-z][0–9][0–9].txt“ -print #查以两个小写字母和两个数字开头的txt文件 $find 。-perm 755 -print $find 。-perm -007 -exec ls -l {} \; #查所有用户都可读写执行的文件同-perm 777 $find 。-type d -print $find 。!-type d -print $find 。-type l -print $find 。-size +1000000c -print #查长度大于1Mb的文件

【IT专家】在正则表达式中使用OR运算符

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 在正则表达式中使用OR 运算符 How can I use OR in a Java regex? I tried the following, but it’s returning null instead of the text. 如何在Java 正则表达式中使用OR?我尝试了以下,但它返回null 而不是文本。 Pattern reg = Patternpile(“\\*+|#+ (.+?)”);Matcher matcher = reg.matcher(“*kdkdk”); \\ “#aksdasd”matcher.find();System.out.println(matcher.group(1)); 3 The regex syntax for searching for X or Y is (X|Y). The parentheses are required if you have anything else in the pattern. You were searching for one of these patterns: 用于搜索X 或Y 的正则表达式语法是(X | Y)。如果模式中还有其他任何内容, 则必须使用括号。您正在搜索以下模式之一: a literal * repeated one or more times 文字*重复一次或多次 OR 要么 a literal # repeated one or more times, followed by a space, followed by one or more of any character, matching a minimum number of times 文字#重复一次或多次,后跟一个空格,后跟一个或多个任何字符,匹配最少次 数 This pattern matches * using the first part of the OR, but since that subpattern defines no capture groups, matcher.group(1) will be null. If you printed matcher.group(0), you would get * as the output. 此模式使用OR 的第一部分匹配*,但由于该子模式不定义捕获组,因此 matcher.group(1)将为null。如果你打印matcher.group(0),你会得到*作为输 出。 If you want to capture the first character to the right of a space on a line that starts with either “*”or “#”repeated some number of times, followed by a space and at least one

15个极好的Linux find命令示例

前阵子,我们审查了15件实事find命令的例子(第一部分)。查找命令可以做很多比只是在寻找基于名称的文件(第2部分)在这篇文章中,让我们来讨论15高级find命令的例子,包括-根据它访问,修改或改变的时间查找文件,查找文件相比之下,执行操作找到的文件等。 基于访问/修改/更改时间查找文件 你可以找到基于以下三个文件的时间属性的文件。 1.访问时间的文件。文件访问时,访问时间得到更新。 2.的文件的修改时间。文件内容修改时,修改时间得到更新。 3.更改文件的时间。更改时间时,被更新的inode数据的变化。 在下面的例子中,min选项之间的差异和时间选项是参数。 ?分论点将它的参数为分钟。例如,60分钟(1小时)= 60分钟。 ?时间参数,将它的参数为24小时。例如,时间2 = 2 * 24小时(2天)。 ?虽然这样做的24个小时计算,小数部分都将被忽略,所以25小时为24小时,和47小时取为24小时,仅48小时为48小时。要获得更清晰的参考atime的部分find 命令的手册页。 例1:找到在1个小时内被更改的文件 想要通过文件修改时间找出文件,可以使用参数-mmin -mtime。下面是man手册中有关mmin和mtime的定义。 ?-mmin n文件最后一次修改是在n分钟之内 ?-mtime n文件最后一次修改是在n*24小时之内(译者注:也就是n天了呗)执行下面例子中的命令,将会找到当前目录以及其子目录下,最近一次修改时间在1个小时(60分钟)之内的文件或目录 1 # find . -mmin -60

同样的方式,执行下面例子中的命令,将会找到24小时(1天)内修改了的文件(文件系统根目录/ 下) 1 # find / -mtime -1 例2:找到1个小时内被访问过的文件 想要通过文件访问时间找出文件,可以使用参数-amin -atime。下面是man手册中有关amin和atime的定义。 ?-amin n文件最后一次访问是在n分钟之内 ?-atime n文件最后一次访问是在n*24小时之内 执行下面例子中的命令,将会找到当前目录以及其子目录下,最近一次访问时间在1个小时(60分钟)之内的文件或目录 1 # find . -amin -60 同样的方式,执行下面例子中的命令,将会找到24小时(1天)内被访问了的文件(文件系统根目录/ 下) 1 # find / -atime -1 例3:查找一个小时内状态被改变的文件 (译者注:这里的改变更第1个例子的更改文件内容时间是不同概念,这里是更改的是文件inode的数据,比如文件的权限,所属人等等信息) 要查找文件的inode的更改时间,使用-cmin和-ctime选项 ?-cmin n文件的状态在n分钟内被改变 ?-ctime n文件状态在n*24小时内(也就是n天内)被改变 (译者注:如果上面的n为-n形式,则表示n分钟/天之内,n为+n则表示n分钟/天之前) 下面的例子在当前目录和其子目录下面查找一个小时内文件状态改变的文件(也就是60分钟内): 1 # find . -cmin -60 同样的道理,下面的例子在根目录/及其子目录下一天内(24小时内)文件状态被改变的文件列表: 1 # find / -ctime -1 例4:搜索仅仅限定于文件,不显示文件夹

java中正则表达式的使用

Java代码 1.Java中在某个字符串中查询某个字符或者某个子字串Java代码

Java代码 3.对字符串的分割 Java代码 如果用正则表达式分割就如上所示,一般我们都会使用下面更简单的方法:Java代码 4.字符串的替换/删除 Java代码 如果要把字符串中的@都给删除,只用要空字符串替换就可以了: Java代码

注:对Pattern类的说明: 1.public final class java.util.regex.Pattern是正则表达式编译后的表达法。 下面的语句将创建一个Pattern对象并赋值给句柄pat:Pattern pat = https://www.360docs.net/doc/1013514046.html,pile(regEx); 有趣的是,Pattern类是final类,而且它的构造器是private。也许有人告诉你一些设计模式的东西,或者你自己查有关资料。这里的结论是:Pattern类不能被继承,我们不能通过new创建Pattern类的对象。 因此在Pattern类中,提供了2个重载的静态方法,其返回值是Pattern对象(的引用)。如:Java代码 1.public static Pattern compile(String regex) { 2.return new Pattern(regex, 0); 3.} 当然,我们可以声明Pattern类的句柄,如Pattern pat = null; 2.pat.matcher(str)表示以用Pattern去生成一个字符串str的匹配器,它的返回值是一个Matcher类的引用。 我们可以简单的使用如下方法:boolean rs = https://www.360docs.net/doc/1013514046.html,pile(regEx).matcher(str).find();

如何利用find命令查找文件

如何利用find命令查找文件 find命令会在指定目录及其子目录下查找符合条件的特定文件。此命令的最大用处是当忘了文件的正确所在,而想找到该文件。命令格式find 目录名条件目录名—欲开始寻找的目录所在。find会寻找此目录及其子目录。可以有多个目录名称,只要目录与目录之间用空格分开即可。条件—欲搜索文件的条件,可包含文件名称、属主、最后修改时间等等。条件列表说明-name name 指定要被寻找的文件或目录名称,可用通配符,如, -name ‘*.c’-print 将符合条件的路径打印出来-size n 寻找占用n个block的文件-type x 以文件类型作为寻找条件。文件类型x如下:d —目录(directory), f —文件(file),b —块(block), c —字符(character),p —管道(pipe)-user user 寻找属于user所拥有的文件,user可为用户名或uid号-group group 寻找用户组为group的所有文件,group可为组名称或gid号-links n 寻找链接数等于n的所有文件-atim n 寻找n天之前曾被存取的文件-mtime n 寻找n天之前曾被修改的文件-exec command {}\; 用寻找到的文件作为执行command的对象,{}内存欲执行command时所需的参数条件的逻辑运算符:逻辑运算符逻辑意义举例说明!非!-name “*.c”所有不以.c为扩展名的文件-o 或-size +10 -o -links 3 所有大于10block或链接数为3的文件与-size +10 -links 3 大于10block且链接数为3的文

C语言使用正则表达式(常规方法)

C语言使用正则表达式 据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用。C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用regex.h提供的库。我先贴一段代码展示一下RE在C语言里是怎么用的 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 int main(){ 8 9 char*bematch ="hhhericchd@https://www.360docs.net/doc/1013514046.html,"; 10 char*pattern ="h{3,10}(.*)@.{5}.(.*)"; 11 char errbuf[1024]; 12 char match[100]; 13 regex_t reg; 14 int err,nm =10; 15 regmatch_t pmatch[nm]; 16 17 if((err=regcomp(®,pattern,REG_EXTENDED))<0){ 18 regerror(err,®,errbuf,sizeof(errbuf)); 19 printf("err:%s\n",errbuf); 20 }

利用正则表达式进行查找

利用正则表达式进行查找 Js中利用正则表达式进行查找 一、String对象支持四种利用正则表达式的方法,分别为search(),replace(),match(),split() 1、search()方法以正则表达式作为参数,返回第一个与之匹配的子串开始的位置,如果没有任何与之匹配的子串,它返回-1。 2、replace()方法执行检索和替换操作,它的第一个参数是正则表达式,第二个参数是要进行替换的字符串或者闭包。 3、match()方法的唯一一个参数是正则表达式,它的行为取决于这个正则表达式的标志,如果正则表达式包含了标志g,它的返回值就是包含了出现在字符串中匹配的数组。如果该正则表达式不包含标志g,它也返回一个数组,它的第一个元素是匹配的字符串,余下的元素则是正则表达式中的各个分组。 4、split()方法是能够支持模式匹配的。 二、RegExp对象定义了两个用于模式匹配的方法,它们是exec()和test() 1、RegExp的exec()方法和String的match()方法很类似,它对一个指定的字符串执行一个正则表达式匹配,如果没有找到任何一个匹配,它将返回null,否则返回一个数组,这个数组的第一个元素包含的是与正则表达式相匹配的字符串,余下的所有元素包含的是匹配的各个分组。而且,正则表达式对象的index属性还包含了匹配发生的字符串的位置,属性input 引用的则是被检索的字符串。 如果正则表达式具有g标志,它将把该对象的lastIndex属性设置到紧接着匹配字符串的位置开始检索,如果exec()没有发现任何匹配,它将把lastIndex属性重置为0,这一特殊的行为可以使你可以反复调用exec()遍历一个字符串中所有的正则表达式匹配。 2、RegExp对象的test()参数为一个字符串,如果这个字符串包含正则表达式的一个匹配,它就返回true,否则返回false 当一个具有g标志的正则表达式调用test()方法时,它的行为和exec()相同,既它从lastIndex 处开始检索特定的字符串,如果它发现匹配,就将lastIndex设置为紧接在那个匹配之后的字符的位置,这样我们就可以使用方法test()来遍历字符串了。 PS:以上内容摘自月影的《JavsScript王者归来》,一本不错的书。

JAVA中正则表达式使用介绍

JAVA中正则表达式使用介绍 一、什么是正则表达式 正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。 正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,进行信息的验证。 此外,它还能够高效地创建、比较和修改字符串,以及迅速地分析大量文本和数据以搜索、移除和替换文本。 例如: 二、基础知识 1.1开始、结束符号(它们同时也属于定位符) 我们先从简单的开始。假设你要写一个正则表达式规则,你会用到^和$符号,他们分别是行首符、行尾符。 例如:/^\d+[0-9]?\d+$/ 1.2句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符: 1.3方括号符号 为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符: 1.4“或”符号

正则表达式入门

/b 代表着单词的开头或结尾,也就是单词的分界处.如果要精确地查找hi这个单词的话,我们应该使用/bhi/b. .是另一个元字符,匹配除了换行符以外的任意字符,*同样是元字符,它指定*前边的内容可以重复任意次以使整个表达式得到匹配。 .*连在一起就意味着任意数量的不包含换行的字符。 /d是一个新的元字符,匹配任意的数字,0/d/d‐/d/d/d/d/d/d/d/d也就是中国的电话号码.为了避免那么多烦人的重复,我们也可以这样写这个表达式:0/d{2}‐/d{8}。 /s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。/w匹配字母或数字或下划线或汉字。 /b/w{6}/b 匹配刚好6个字母/数字的单词。 字符转义:使用/来取消这些字符的特殊意义。因此,你应该使用/.和/*。当然,要查找/本身,你也得用//。 代码 说明 . 匹配除换行符以外的任意字符 /w 匹配字母或数字或下划线或汉字 /s 匹配任意的空白符 /d 匹配数字 /b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 重复: 常用的限定符 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 要想查找数字,字母或数字,你只需要在中括号里列出它们就行了,像[aeiou]就匹配任何一个元音字母,[.?!]匹配标点符号(.或?或!)

常用的反义代码 代码/语法 说明 /W 匹配任意不是字母,数字,下划线,汉字的字符 /S 匹配任意不是空白符的字符 /D 匹配任意非数字的字符 /B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符 替换: 正则表达式里的替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。 0/d{2}‐/d{8}|0/d{3}‐/d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010‐12345678),一种是4位区号,7位本地号(0376‐2233445)。 /(0/d{2}/)[‐ ]?/d{8}|0/d{2}[‐ ]?/d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用替换|把这个表达式扩展成也支持4位区号的。 /d{5}‐/d{4}|/d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用替换时,顺序是很重要的。如果你把它改成/d{5}|/d{5}‐/d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配替换时,将会从左到右地测试每个分枝条件,如果满足了某个分枝的话,就不会去管其它的替换条件了。 分组: 如果想要重复一个字符串又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。 (/d{1,3}/.){3}/d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:/d{1,3}匹配1到3位的数字,(/d{1,3}/.}{3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(/d{1,3})。不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址(IP地址中每个数字都不能大于255)。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0‐4]/d|25[0‐5]|[01]?/d/d?)/.){3}(2[0‐4]/d|25[0‐5]|[01]?/d/d?)。 后向引用: 后向引用用于重复搜索前面某个分组匹配的文本。例如,/1代表分组1匹配的文本。难以理解?请看示例: /b(/w+)/b/s+/1/b可以用来匹配重复的单词,像go go, kitty kitty。首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(/b(/w+)/b),然后是1个或几个空白符(/s+,最后是前面匹配的那个单词(/1)。

FIND命令大全

Linux Find命令精通指南 作者:Sheryl Calish 简单介绍这一无处不在的命令的强大的方面以及混乱的方面。 2008年7月发布 Linux find命令是所有Linux命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他Linux命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用find命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。 本文的目的是,通过概述find命令的用途和潜能,简化该命令的学习和使用。同时,它将针对find命令的某些最强大但最混乱的方面提供一个基本的指南和参考。 [注意:本文使用的find版本是GNU版本,因此,某些细节可能与其他版本的find有所不同。] 基本格式 开始之前,我们先来看一下find命令的基本结构: find start_directory test options criteria_to_match action_to_perform_on_results 在以下命令中,find将开始在当前目录(用“.”表示)中查找任何扩展名为“java”的文件:find.-name"*.java" 下面是该命令所找到的命令的缩略清单: find.-name"*.java" ./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java ./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java .. [注意:如果您从本文剪切并粘贴来运行该find命令,您可能需要使用自己的键盘替换双引号(“”)才能得出正确的结果。] 以下命令将执行相同的操作。在这两种情况下,您都需要对通配符进行转义以确保它传递到find命令并且不由shell解释。因此,请将您的搜索字符串放到引号里,或者在它前面加上反斜线:

C#正则表达式之Regex类用法详解

C#正则表达式之Regex类用法详解 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串,正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法。 Regex类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。 正则表达式基础概述 什么是正则表达式 在编写字符串的处理程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 通常,我们在使用WINDOWS查找文件时,会使用通配符(*和?)。如果你想查找某个目录下的所有Word文档时,你就可以使用*.doc进行查找,在这里,*就被解释为任意字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂。 一、C#正则表达式符号模式

说明: 由于在正则表达式中“\”、“?”、“*”、“^”、“$”、“+”、“(”、“)”、“|”、“{”、“[”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如希望在字符串中至少有一个“\”,那么正则表达式应该这么写:\\+。

二、在C#中,要使用正则表达式类,请在源文件开头处添加以下语句: 复制代码代码如下: using Syst https://www.360docs.net/doc/1013514046.html, ressions; 三、RegEx类常用的方法 1、静态Match方法 使用静态Match方法,可以得到源中第一个匹配模式的连续子串。 静态的Match方法有2个重载,分别是 Regex.Match(string input,string pattern); Regex.Match(string input,string pattern,RegexOptions options); 第一种重载的参数表示:输入、模式 第二种重载的参数表示:输入、模式、RegexOptions枚举的“按位或”组合。 RegexOptions枚举的有效值是: Complied表示编译此模式 CultureInvariant表示不考虑文化背景 ECMAScript表示符合ECMAScript,这个值只能和IgnoreCase、Multiline、Complied连用ExplicitCapture表示只保存显式命名的组 IgnoreCase表示不区分输入的大小写 Ign https://www.360docs.net/doc/1013514046.html, pace表示去掉模式中的非转义空白,并启用由#标记的注释Multiline表示多行模式,改变元字符^和$的含义,它们可以匹配行的开头和结尾 None表示无设置,此枚举项没有意义 RightToLeft表示从右向左扫描、匹配,这时,静态的Match方法返回从右向左的第一个匹配Singleline表示单行模式,改变元字符.的意义,它可以匹配换行符

相关文档
最新文档