正则遇到难题,200分求好的解决方式

马老虎 2013-10-16 09:53:10

//分别能匹配内容如下2行
'a"sd'
"a'sd"

//我想使用反向引用,看下面的错误正则,但是这个正则能表达我的意思。

(["'])[^\1]+\1

//我想使用 \1 取非。

//如下貌似也不行

(["'])(!(\1))+\1

...全文
129 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
马老虎 2013-10-16
  • 打赏
  • 举报
回复
引用 7 楼 q107770540 的回复:
4楼的不能满足要求? 我测了,可以啊
。。。
q107770540 2013-10-16
  • 打赏
  • 举报
回复
4楼的不能满足要求? 我测了,可以啊
马老虎 2013-10-16
  • 打赏
  • 举报
回复
引用 4 楼 q107770540 的回复:
(["'])[^\1]+?\1 用懒惰匹配
谢谢 斑竹。你都混上斑竹了 可能我帖子中没说清楚。 [^\1] 的含义不是 反向引用取反
马老虎 2013-10-16
  • 打赏
  • 举报
回复
引用 3 楼 hjywyj 的回复:
(?is)(["'])((?!\1).)+\1 或者直接 (?is)(["']).+?\1
谢谢,我想看到的就是 第一种写法。真惭愧,我将 ! 记成“取反”了。。。
q107770540 2013-10-16
  • 打赏
  • 举报
回复
(["'])[^\1]+?\1 用懒惰匹配
  • 打赏
  • 举报
回复
(?is)(["'])((?!\1).)+\1 或者直接 (?is)(["']).+?\1
q107770540 2013-10-16
  • 打赏
  • 举报
回复
直接这样就行了啊: (['"]).*?\1
马老虎 2013-10-16
  • 打赏
  • 举报
回复
呃。。。。。。。。。
q107770540 2013-10-16
  • 打赏
  • 举报
回复
或许这样,看着更直观一些,加上 ^$
void Main()
{
	Regex reg=new Regex(@"^([""'])[^\1]+?\1$");
	string[] test=
				{
					"'a\"s\\1d'",
					"'a\"\\s1d'",
					"'a\"sd'",
					"\"a'sd\""
				};
	foreach(string s in test)
		Console.WriteLine("{0}:\t{1}",s,reg.IsMatch(s));
		
	/*
	'a"s\1d':	True
	'a"\s1d':	True
	'a"sd':	True
	"a'sd":	True
	*/
}
q107770540 2013-10-16
  • 打赏
  • 举报
回复
引用 8 楼 mmm306306 的回复:
[quote=引用 7 楼 q107770540 的回复:] 4楼的不能满足要求? 我测了,可以啊
。。。[/quote] 难道你以为 [^\1] 匹配的是 非\1两字符之外的其他所有字符? 我还特地测试过了:
void Main()
{
	Regex reg=new Regex(@"([""'])[^\1]+?\1");
	string[] test=
				{
					"'a\"s\\1d'",
					"'a\"\\s1d'",
					"'a\"sd'",
					"\"a'sd\""
				};
	foreach(string s in test)
		Console.WriteLine("{0}:\t{1}",s,reg.IsMatch(s));
		
	/*
	'a"s\1d':	True
	'a"\s1d':	True
	'a"sd':	True
	"a'sd":	True
	*/
}

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧