正则表达式匹配字符串的问题
比如“.*?name.*?”就可以匹配找出所有含有"name"的字符串,就像mysql查询用"where
..
like
'%name%'"一样的。并且正则可以更灵活,如果你写的".*?name\d{2}.*?",那么能找出像含有"name12","name09"这种name后至少跟2位数字的。总之,正则可以实现模糊查询,不过如果你的需求不是这么灵活匹配,那么就用普通字符串处理函数就可以了。
事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确。就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问题:
复制代码
代码如下:
^((?!hede).)*$
上面这个表达式就能过滤出不包含‘hede'字串的信息。我上面也说了,这种写法并不是正则表达式“擅长”的用法,但它是可以这样用的。
解释
一个字符串是由n个字符组成的。在每个字符之前和之后,都有一个空字符。这样,一个由n个字符组成的字符串就有n+1个空字符串。我们来看一下“ABhedeCD”这个字符串:
所有的e编号的位置都是空字符。表达式(?!hede).会往前查找,看看前面是不是没有“hede”字串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。这种正则表达式的“查找”也叫做“zero-width-assertions”(零宽度断言),因为它不会捕获任何的字符,只是判断。
在上面的例子里,每个空字符都会检查其前面的字符串是否不是‘hede',如果不是,这.(点号)就是匹配捕捉这个字符。表达式(?!hede).只执行一次,所以,我们将这个表达式用括号包裹成组(group),然后用*(星号)修饰——匹配0次或多次:
复制代码
代码如下:
((?!hede).)*。
你可以理解,正则表达式((?!hede).)*匹配字符串"ABhedeCD"的结果false,因为在e3位置,(?!hede)匹配不合格,它之前有"hede"字符串,也就是包含了指定的字符串。
在正则表达式里,
?!
是否定式向前查找,它帮我们解决了字符串“不包含”匹配的问题。
以下是一些补充:
分享下php生成随机数的三种方法,生成1-10之间的不重复随机数,php生成不重复随机数的例子,需要的朋友参考下。
在hacker
news上看到regex
golf,几道很有趣的正则表达式的题,有的需要用到不匹配这种匹配,比如需要匹配不包含某个单词的串。
开始正题之前,先来看看正则表达式的语法:
[abc]
a或b或c
.
任意单个字符
a?
零个或一个a
[^abc]
任意不是abc的字符
\s
空格
a*
零个或多个a
[a-z]
a-z的任意字符
\S
非空格
a+
一个或多个a
[a-zA-Z]
a-z或A-Z
\d
任意数字
a{n}
正好出现n次a
^
一行开头
\D
任意非数字
a{n,}
至少出现n次a
$
一行末尾
\w
任意字母数字或下划线
a{n,m}
出现n-m次a
(...)
括号用于分组
\W
任意非字母数字或下划线
a*?
零个或多个a(非贪婪)
(a|b)
a或b
\b
单词边界
(a)...\1
引用分组
(?=a)
前面有a
(?!a)
前面没有a
\B
非单词边界
正则表达式中有(?=a)和(?!a)来表示我们是否需要匹配某个东西。
所以,有需要不匹配某样内容时,就可以用(?!a)了。比如要匹配不含hello的字符串就可以这样写。
复制代码
代码如下:
^(?!.*hello)
这里.*用来表示hello之前可能有其他的字符,为什么还要加^呢,因为如果不加的话,可能匹配到h之后的这个位置上了。
现在就可以解决regex
golf上的abba这道题了。
这道题是去匹配不含abba这种形式的单词,比如abba,anallagmatic就不应该匹配上。
正则表达式代码:
复制代码
代码如下:
^(?!.*(.)(.)\2\1)
然后利用不匹配,还可以解决prime这道题,这道题匹配有素数个x的串,先看正则。
复制代码
代码如下:
^(?!(xx+)\1+$)
(xx+)是匹配2个及2个以上的x,(xx+)\1+就是匹配重复出现2个及以上的串,所以(xx+)\1+就表示了那些非素数的串,那么素数串就是除去这些非素数串,即是以上的正则表达式了。
python正则表达式是什么?
Python正则表达式是一个特殊的字符序列,是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。判断一个字符串是否是合法的Email的方法是:1、创建一个匹配Email的正则表达式;2...
正则表达式:匹配中间有特定字符串字符串
^.*\\[2014\\].只要含有[2014],字符串就会验证通过 ,中括号是正则的元字符,需要用\\转义 前后的XXXX是任意字符,没有限制,因此只要含有[2014],整个单行的字符串会被匹配
以“c”“d”或“e”开头的正则表达式?
以 "c"、"d" 或 "e" 开头的正则表达式可以使用字符集合(character set)来实现,即使用方括号 [ ] 括起需要匹配的字符。具体地,该正则表达式可以写作:^[cde]其中 ^ 表示匹配行首,[ ] 内的 cde 表示匹配 c、d 或 e 中的任意一个字符。这个正则表达式可以匹配以下字符串:- "cat"- "dog...
正则表达式:\/^[0-9]*[1-9][0-9]*$\/ 是什么意思?
意思是匹配0~99999的数字,包括类似001这样的数字。^:匹配字符串开始([1-9]{0,1}[0-9]{0,4})是一个组,组内有两个部分:[1-9]{0,1}[0-9]{0,4}[1-9]{0,1}:[1-9]表示1到9的数字,{0,1}表示0或或1个,即有或没有的意思,等价于正则中的?[0-9]{0,4}:[0-9]表示...
正则表达式如何匹配空值?
正则表达式匹配空值方式如下:\\b 匹配单词开头或结尾位置 ^ 匹配字符串开端位置 匹配字符串结尾位置 \\s 匹配一切空白字符 \\n 匹配换行 正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
java正则表达式,要求是匹配的字符串,只能包含3或5或6这3个数字并且每个...
以下能匹配,必须是数字3,5,6开头,且以数字3,5,6结尾,中间使用;分割 var regex = \/^[356](;[356])*$\/;console.log(regex.test('3')); \/\/ trueconsole.log(regex.test('3;')); \/\/ falseconsole.log(regex.test('35')); \/\/ falseconsole.log(regex.test('3;5;')); \/\/ ...
JAVA正则表达式获取特定的字符串
"^The": 开头一定要有"The"字符串;"of despair$": 结尾一定要有"of despair" 的字符串;那么,"^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配。"notice": 匹配包含notice的字符串。你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) ...
正则表达式,匹配特定字符后面的内容
如果前面是固定的“姓名:”的话,试试(?<=姓名:).*?(?=,\\d{11})。正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
请问以下正则表达式分别匹配的是什么样的字符串?
string = re.sub(r"[^A-Za-z0-9(),!?\\'\\`]", " ", string) 除A-Za-z0-9(),!?'`外的字符,去除 string = re.sub(r'(.)\\1+', r'\\1\\1', string) 匹配两个以上连续的字符,只保留两个连续的字符 string = re.sub(r"\\'s", " \\'s", string) 匹配 '跟一个...
正则表达式中的"\\."表示什么意思
正则表达式中的"\\."表示什么意思?\\ 这是引用符,用来将这里列出的这些元字符当作普通的字符来进行匹配。例如正则表达式\\$被用来匹配美元符号,而不是行尾,类似的,正则表达式\\.用来匹配点字符,而不是任何字符的通配符。. 匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不...
申于同笑: colour color 比如你要匹配上面颜色的单词,由于有两种写法,你可以用这个正则 colou?r 说明:?问号表示匹配0或1次,就是?前面的u可以没有,也可以出现一次
安县18680051238: 1.正则表达式 (a | b) + [0 - 9]*c 可匹配下列哪些字符串?( ) - ?
申于同笑:[选项] A. abac B. 90c C. aba10c D. ac 麻烦回答后能具体说明下原因.
安县18680051238: 正则表达式匹配的文件名的字符串问题,怎么解决 - ?
申于同笑: 应该说用findstr命令并不适合所提问题,它的所谓"正则表达式"也就能查找某文件中或某字符串中是否含有某类特征组合,就是说只能精确到是否含有的一行或一整串,而不能从一串中截取该串中的相符的一段,要想截取得用别的命令
安县18680051238: 正则表达式不匹配某些字符串! - ?
申于同笑: 直接找不含exp字符的单词正则是实现不了的.不过可以取巧,找到含exp字符单词,然后把这些单词替换成空字符串,然后再在替换好的字符串里面找单词 找含exp的单词的正则(?=[A-Za-z]*exp[A-Za-z]*)[A-Za-z]* 匹配替换后的字符串的字符的正则 [A-Za-z]* 如图
安县18680051238: 用正则表达式怎样匹配 不包含特定字符串的字符串 - ?
申于同笑: 正则表达式匹配公式为:1. ^((?!XXX).)*$,XXX为字符串.2. 另外列举一些正则表达式的语法: [abc] a或b或c . 任意单个字符 a? 零个或一个a [^abc] 任意不是abc的字符 \s 空格 a* 零个或多个a [a-z] a-z的任意字符 \S 非空格 a+ 一个或多个a [a-zA-Z] 拓展资料:1. 字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,如C,pascal,Visual以及LotusScript中进行字符串拷贝,计算长度,字符查找等的函数.
安县18680051238: java 正则表达式匹配包含字符串 - ?
申于同笑: 这个问题不用正则表达式,用JavaString类的contains函数就可以解决了. 具体的Java程序代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22publicclassCB {publicstaticvoidcheck(String source,String target){booleanflag=...
安县18680051238: 正则表达式 匹配字符串 - ?
申于同笑: 正则表达式:^(.?|[^/]{2}.*)(["“].*?["”]) 这里双引号支持英文和中文的双引号 匹配这一行第一个双引号开始到第二个双引号结束的内容 若这一行以//开通则不匹配 匹配成功后取第2组的值即为所要结果 java 代码示例:public class Test { ...
安县18680051238: 正则表达式匹配问题 请问如何匹配一下字符串? xx:xx:xx:xx:xx:xx xx:数字和字母的组合 - ?
申于同笑: [0-9]+(?=[^0-9]*$)这样可以匹配字符串最后面的数字.字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充两点:1.Free Pascal中的Ansistring只能看成整体,很多函数无法使用,就算是提取单个元素也很麻烦,所以除非万不得已就不要用;2.字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“a”,s[10]="j",而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有.),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组.
安县18680051238: c++高手来啊,关于:正则表达式(匹配字符串)的 - ?
申于同笑: char* http_cut_fun(char*cst1,char*cst2 ,char*cst3 ) {CString sting =""; if (cst1.strgetlength() <0 ||cst2.strlgetength() <0 ||cst3.strgetlength() <0 ) return NULL; if( (!st1.find (st1,st2) ||(!st1.find (st1,st3) ) return NULL; int i = st1.find (st1,st2) + st2....
安县18680051238: 正则表达式匹配字符串 - ?
申于同笑: <% 'strng 放置源字串Dim strng:strng="abddd...<h3 class=""r""><a href="" http://www.newmind40.com/ai_gb.htm"" target=_blank class=l onmousedown=""return clk(0,'','','','12','','0CCQQFjABOAo')""><em>好好学习</em></a></h...