字符串1: abcdCHINAaaaa
字符串2: sdesyyyyaaaa
字符串3: abcdzzzzaaaa
我需要的是:字符串中间不包括“CHINA”子串的字符串。
即:对于字符串1,2,3来讲,我需要字符串2,字符串3,但不需要字符串1.
那正则表达式应该怎么写呢?
谢谢!
9 个解决方案
#1
注:不一定恰好是“字符串中间”,我的意思是:字符串中“不包含某个特殊子串”的正则表达式写法。
#2
提醒:正则表达式不是万能的;但有限状态自动机是万能的。
参考《编译原理》中的词法分析和有限状态自动机。
参考《编译原理》中的词法分析和有限状态自动机。
#3
直接搜索CHINA,搜索到,不符合。用不上正则
#4
如果一定要用正则表达式呢?
我的需求其实很简单,难道正则表达式不支持这种类型的搜索?
我的需求其实很简单,难道正则表达式不支持这种类型的搜索?
#5
一个 if (str.find("CHINA") == string::npos) 就能解决的问题,你非要用正则表达式的话。。。
也可以,方法很多,这里例举一中
[\s\S]*CHINA[\s\S]*
和目标字符串进行match匹配,如果匹配失败,则这个字符串是你要的字符串。
如果匹配成功,则这个字符串不是你要的。
也可以,方法很多,这里例举一中
[\s\S]*CHINA[\s\S]*
和目标字符串进行match匹配,如果匹配失败,则这个字符串是你要的字符串。
如果匹配成功,则这个字符串不是你要的。
#6
在本贴中我的描述和例子,只是一个例子,为的是便于大家理解,事实上我的问题没有这么简单,这里只是抽象出了最简单的需求。所以,我的现实中的问题,绝对比str.find要复杂的多,所以,才想到要用正则表达式。
你给出的方案,在真实情况下不太可行。主要体现在“和目标字符串进行match匹配,如果匹配失败...”,这个是不行的,当然,它满足我举的例子中的需求。
#7
从纯正则表达式的角度,难道没有语法支持否定语义吗?即:匹配不包含某子字符串。
#8
使用零宽度负预测先行断言
^((?!CHINA)[\s\S])+$
这样就反过来了,如果匹配成功,则说明这个字符串中不包含CHINA,正是你要的字符串
如果匹配失败,则说明这个字符串包含CHINA,不是你要的字符串
http://www.cnblogs.com/dongzhiquan/archive/2009/12/12/1994691.html
^((?!CHINA)[\s\S])+$
这样就反过来了,如果匹配成功,则说明这个字符串中不包含CHINA,正是你要的字符串
如果匹配失败,则说明这个字符串包含CHINA,不是你要的字符串
http://www.cnblogs.com/dongzhiquan/archive/2009/12/12/1994691.html
#9
刚才测试了一下你的代码,好象可行。
如果要求:既不包括CHINA,又不包括JAPAN,那应该怎么写呢?
事实上,我需要的是这种(即:N者都不包括)的情形。
#1
注:不一定恰好是“字符串中间”,我的意思是:字符串中“不包含某个特殊子串”的正则表达式写法。
#2
提醒:正则表达式不是万能的;但有限状态自动机是万能的。
参考《编译原理》中的词法分析和有限状态自动机。
参考《编译原理》中的词法分析和有限状态自动机。
#3
直接搜索CHINA,搜索到,不符合。用不上正则
#4
如果一定要用正则表达式呢?
我的需求其实很简单,难道正则表达式不支持这种类型的搜索?
我的需求其实很简单,难道正则表达式不支持这种类型的搜索?
#5
一个 if (str.find("CHINA") == string::npos) 就能解决的问题,你非要用正则表达式的话。。。
也可以,方法很多,这里例举一中
[\s\S]*CHINA[\s\S]*
和目标字符串进行match匹配,如果匹配失败,则这个字符串是你要的字符串。
如果匹配成功,则这个字符串不是你要的。
也可以,方法很多,这里例举一中
[\s\S]*CHINA[\s\S]*
和目标字符串进行match匹配,如果匹配失败,则这个字符串是你要的字符串。
如果匹配成功,则这个字符串不是你要的。
#6
在本贴中我的描述和例子,只是一个例子,为的是便于大家理解,事实上我的问题没有这么简单,这里只是抽象出了最简单的需求。所以,我的现实中的问题,绝对比str.find要复杂的多,所以,才想到要用正则表达式。
你给出的方案,在真实情况下不太可行。主要体现在“和目标字符串进行match匹配,如果匹配失败...”,这个是不行的,当然,它满足我举的例子中的需求。
#7
从纯正则表达式的角度,难道没有语法支持否定语义吗?即:匹配不包含某子字符串。
#8
使用零宽度负预测先行断言
^((?!CHINA)[\s\S])+$
这样就反过来了,如果匹配成功,则说明这个字符串中不包含CHINA,正是你要的字符串
如果匹配失败,则说明这个字符串包含CHINA,不是你要的字符串
http://www.cnblogs.com/dongzhiquan/archive/2009/12/12/1994691.html
^((?!CHINA)[\s\S])+$
这样就反过来了,如果匹配成功,则说明这个字符串中不包含CHINA,正是你要的字符串
如果匹配失败,则说明这个字符串包含CHINA,不是你要的字符串
http://www.cnblogs.com/dongzhiquan/archive/2009/12/12/1994691.html
#9
刚才测试了一下你的代码,好象可行。
如果要求:既不包括CHINA,又不包括JAPAN,那应该怎么写呢?
事实上,我需要的是这种(即:N者都不包括)的情形。