正则表达式怎么理解?百度百科看不懂

作者&投稿:城顺 (若有异议请与网页底部的电邮联系)
帮解释下正则表达式,看不懂啊.~

我也是初学这个,帮你理解一下,有错误的地方多多包涵,呵呵:

不能把一个字符类当作一个范围的终点使用:

首先,你得明白[]的作用, [] 这对中括号里包涵的东西,代表一个字符的匹配,比如[a-z]代表任意一个小写字母的匹配,注意,是一个,就是说,a-z是这个匹配的范围,再看你的例子:[A-[:lower:]] 外面这对中括号里的范围应该是A-[:lower:],这个[:lower:]是posix风格的字符类,代表一个小写字母,也就是完全等同于我前面写的那个[a-z],知识写法不一样,但是他不能作为外面那个中括号的范围的终点,ok,明白了吧?

ereg是php里的一个字符匹配函数,他最少需要两个参数,第一个一般就是个正则表达式,第二个是需要检查的字符串,第三个参数可选,是存放的数组,你的这个ereg('[@[:digit:][:upper:]]'); 只有一个参数,这个我也不大懂,可能第二个参数被默认成空字符串了吧,所以返回的bool类型应该是false,你可以用个if语句测试下。

1、入门简介
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
  举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。
2、基本语法
在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。
正则表达式的形式一般如下:
/love/
其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
较为常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次,而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。
下面,就让我们来看一下正则表达式元字符的具体应用。
/fo+/
因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
/eg*/
因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。
/Wil?/
因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。
除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,
/jim{2,6}/
上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。
在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。
\s:用于匹配单个空格符,包括tab键和换行符;
\S:用于匹配除单个空格符之外的所有字符;
\d:用于匹配从0到9的数字;
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
. :用于匹配除换行符之外的所有字符。
(说明:我们可以把\s和\S以及\w和\W看作互为逆运算)
下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。
/\s+/
上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。
/\d000/
如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。
除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。
较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。其中,“^”定位符规定匹配模式必须出现在目标字符串的开头,“$”定位符规定匹配模式必须出现在目标对象的结尾,\b定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说:
/^hell/
因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。
/ar$/
因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。
/\bbom/
因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。
/man\b/
因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
/[A-Z]/
上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。
/[a-z]/
上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。
/[0-9]/
上述正则表达式将会与从0到9范围内任何一个数字相匹配。
/([a-z][A-Z][0-9])+/
上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。
如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:
/to|too|2/
上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。
正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:
/[^A-C]/
上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。
最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:
/Th\*/
上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。
3、使用实例
①PHP中可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下:
 
以下为引用的内容:
  ereg(pattern, string)
  其中,pattern代表正则表达式的模式,而string则是执行查找替换操作的目标对象。同样是验证邮件地址,使用PHP编写的程序代码如下:
< ?php
   if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email)){
echo “Your email address is correct!”;}
   else{
echo “Please try again!”;
}
?>

(from wiki)In the 1950s, mathematician Stephen Cole Kleene described these models(指自动机) using his mathematical notation called regular sets

然后再regular expression,翻译过来叫正则
-----------------------------------------------------------------
对正则的理解... 排除语法的问题,那就没问题了...
简单的说,就是让机器理解你的意图,与编程差不都,但是他只保留了精华部分,去掉了一下修饰部分。
举例来说 123abcABC 这组字符串,你想要数字部分,那你就跟计算机说,我只要数字部分,帮我提取出来。
而怎么跟他说呢,就是:[0-9]* ,意思就是说,所有 0 至 9 这的字符帮我拿出来,当然,你也可以用其它方式说,比如 所有包含 1234567890 帮我拿出来,那就这么写 [1234567890]* ,或者说,所有数字帮我拿出来 [\d]* 就这么写。
以上三个正则表达式可以得到相同的结果。
-----------------------------------------------------------------
就是让计算机理解你的意图。当然,是使用他懂的语言来告诉他你的意图。

当然,你的意图可以更复杂一些,比如 123abcABC456
你可以说把最前面的数字帮我拿出来:^[\d]* (注:此结果得到的字符是123)
或者说把最后的数字帮我拿出来:[\d]*$ (注:此结果得到的字符是456)
甚至说帮我把大写 A 字符之前的一个字符帮我拿出来:(.{1})A (注:此结果得到的字符是c)

你要做的就是怎么能让计算机听懂你说的话。


java正则表达式怎么书写?
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。下面介绍具体的方法。1、步骤一 : 新建一个工程和类 我们在这个类中开发相关的代码,先看看 java.util.regex 这个...

C语言中 ad?b:d怎么理解?若声明int a=15,b=20,c=25,d=30,则表达式值为...
这种表达式是你自己写的玩的还是在哪本书上看到的呢?实际项目中你要是敢写这种程序,你的项目经理会踢死你。C语言中的?:是3目运算符,例如 x = a<b ? a : b 意思是:if(a<b)x=a;else x=b;一步一步把下面的这个式子拆开吧 x = ad?b:d if(ad?b:d 把else部分也拆开:if(ad...

c语言中?和:是什么意思
例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。[1]<表达式1> ? <表达式2> : <表达式3>; "?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。可以理解为条件 ? 结果1 :...

...a<>(b>d)的值是? 求解释(那个表达是怎么理解?)~~谢啦!
d>c>b= a<>(b>d) 结果为Boolean 按 0 d>c>b= a<>(b>d)1 b>d :0 d>c>b= a<>0 2 d>c :1 1>b= a<>0 3 1>b :0 0=a<>0 4 0=a :1 0<>0 5 0<>0 :0 所以返回 false ...

C语言里,怎样理解表达式(x=a>b)&&(y=c>d)的意义?
将a>b的值赋值给x 将c>d的值赋值给y 然后进行逻辑与运算。 关键是优先级

C语言求助:已知m=48,ch='a',n=0;则表达式(m>=n && ch<'b'&&!n)的值...
为1.m>=n为真, ch<'b'也为真,!n即非假,则也为真,对于逻辑运算,&&这是逻辑与的意思!相当于“且”,只有三个式子非零,结果则为1。你给的题的值为1.有一个假则假,为0!

正则表达式中取反用什么符号表示?
要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:\\b\\w*q[^u]\\w...

已知int a=5,b=5; 则表达式: ++a>b?a:b-->++a?++b:a的值为6。
第②种情况,是在确定第一个问号表达式的【表达式3】时,没有考虑到b--后面的>号,那是优先级比问号表达式高的运算,所以,它也是错误的。第③种情况,把a:后面的一个整体(一个完整的问号表达式),作为前一个问号表达式的【表达式3】,这才符合优先规定。但是,实际上并没有括号,你只能理解为:...

正则表达式"或"怎么写
竖线“|”就是或的意思。意思是将两个匹配条件进行逻辑“或”(or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。而最简单的元字符是点,它能够匹配任何单个字符(注意不包括换行...

M₄像这样的数字下标怎么用正则表达式匹配上
正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解的,看下图中的示例以及自己多使用几次就能明白。 下图列出了Python支持的正则表达式元字符和语法: 1.2. 数量...

托克托县15726628077: 正则表达式怎么理解?百度百科看不懂 -
窦俊博苏: (from wiki)In the 1950s, mathematician Stephen Cole Kleene described these models(指自动机) using his mathematical notation called regular sets然后再regular expression,翻译过来叫正则-----------------------------------------------------------------对正...

托克托县15726628077: 简明的解释一下什么是正则表达式? -
窦俊博苏: 用来表达文本的特定格式的公式正则就是使用简单的符号来代替特定的文本,然后使用这些符号进行组合,得到一种文本的组成公式.比如 \d 代表数字, \w 代表字母, \d\w 就是前面一个数字,后面一个字母的字符串的正则表达式.

托克托县15726628077: 正则表达式好难懂,求高人指点,怎么学?有什么好的理解方法没有?看到那一串符号,晕了... -
窦俊博苏: 1、入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等.此外,象...

托克托县15726628077: 正则表达式 -
窦俊博苏: 正则经常用于js 判断手机号,邮箱等,通过简单的办法来实现强大的功能符号解释字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符.例如,'n&#...

托克托县15726628077: java 正则表达式 (.+?)怎样理解?举个例子详细说明. -
窦俊博苏: 正则表达式的符号理解吗,* ? +其中*代表的是0-无穷个个,比如/^w*$/,代表有0个或多个数字或字母 ?代表是0-1个,比如/^d*$/,代表最多只有一个数字,也可能没有 +代表有1-无穷个,比如/^d+$/,代表最少有一个数字 .代表的是换行符之外的任意字符,它代表的字符,不是个数,前面三个代表的个数.其实如果要代表个数可以用大括号就可以了,也不用记这些符号,例如d{3,5},代表有3-5个数字.

托克托县15726628077: 用通俗的话解释一下正则表达式,如果能给个vb的事例就更好了.
窦俊博苏: 计算机方面的东西 也很难通俗吧 ,这句应该比较容易懂点 :"用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串." 注意 '语法规则'就是我们写的那个表达式了! 我当时也是源于自己写程序要解决一个问题 才接触到这个知...

托克托县15726628077: 有关|正则表达式| ?? 点理解啊``!?
窦俊博苏: 一个正则表达式,就是用某种模式去匹配一类字符串的一个公式.很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成.正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了.

托克托县15726628077: 帮解释下正则表达式,看不懂啊. -
窦俊博苏: 我也是初学这个,帮你理解一下,有错误的地方多多包涵,呵呵:不能把一个字符类当作一个范围的终点使用:首先,你得明白[]的作用, [] 这对中括号里包涵的东西,代表一个字符的匹配,比如[a-z]代表任意一个小写字母的匹配,注意,是一...

托克托县15726628077: 怎样理解这个正则表达式? -
窦俊博苏: 这个问题稍有点绕,先从简单的开始:=============(\w)(\1)+ 很好理解,把它展开即(\w)(\1)(\1)(\1)...就是匹配连续的相同字符ffffff 或 999999999=============那么(\w)((?=\1\1\1)\1)+ 中间多出来的(?=\1\1\1)表示匹...

托克托县15726628077: 关于正则表达式怎么理解?
窦俊博苏: 表达式 注解 [a-z] 去掉小写字母 [^a-z] 留小写字母 \d 去掉数字 [^\d] 留数字 \H\D 去掉头个HD [H,D] 去掉全部H和D [0-5] 去掉0-5这些数 [6-9] 保留0-5这些数 \d\d 去掉两个连数 \d{2}-\d{5} 去掉XX-XXXXX样式 ^\d{2}-\d{5} 留下XX-XXXXX(不成功) ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网