“分组表达缺失')'”,但事实并非如此

时间:2011-09-01 21:50:26

标签: regex visual-studio find

使用VS2010的查找对话框,我使用以下正则表达式:(?'outer'^div\#.+) input$

我正在尝试使用div#someId中的内容div#someId input创建一个名为“outer”的组(在这种情况下,someId匹配.+

但是,Visual Studio正在显示对话框:Grouped expression is missing ')'

然而,)位于+之后。我逃脱或未能逃脱的是什么?

修改

我不一定需要使用命名分组,我只需要在替换中使用div#someId来添加另一个选择器。

2 个答案:

答案 0 :(得分:3)

Visual Studio的查找和替换似乎使用大括号{ }而不是括号( )来进行反向引用和命名引用。


由于有人可能会发现这在Visual Studio中的查找和替换中尝试使用backreferences / named grouping,因此以下是使用它们的示例:

替换

div#someId input

div#someId input,
div#someId textarea

查找:{^div\#.+ }input并替换为:\0,\n\1textarea

它会将div#someId(与^div\#.+匹配的空格放入第一个反向引用。

使用反向引用构建替换字符串:
然后替换将替换整个字符串:\0

div#someId input

然后是逗号:,

div#someId input,

然后换行:\n

div#someId input,
 

然后是第一组:\1

div#someId input,
div#someId 

然后是给定的文字:textarea

div#someId input,
div#someId textarea

一共制作替换字符串\0,\n\1textarea

更新:根据VS2012中的MSDN question,使用$n而非\n访问后向引用,因此替换字符串为:{{1} }

答案 1 :(得分:1)

您应该使用Productivity Power Tools的内联替换功能,它使用标准的.Net正则表达式