我试图制作一个正则表达式来匹配一段代码,但没有成功。 该表达式在vs2008中不起作用。
我创造了这个:
/\*<parameters>\*/(?<value>[\r\n]*.*)/\*</parameters>\*/
要匹配的来源是:
/*<parameters>*/
@parameter blue
,@parameter2 red
,@parameter3 green
,@parameter4 yellow /*</parameters>*/
或更好:
/*<parameters>*/ \r\n @parameter blue \r\n ,@parameter2 red \r\n ,@parameter3 green \r\n ,@parameter4 yellow /*</parameters>*/
有人能帮助我吗?
感谢, Rodrigo Lobo
答案 0 :(得分:4)
尝试使用此正则表达式:/\*<parameters>\*/(?<value>[^/]*)/\*</parameters>\*/
使用真正的c#Regex模式欺骗的好工具是code.google.com上的regex-freetool
答案 1 :(得分:2)
RegexOptions.Multiline
仅更改^
和$
的语义 - 您需要RegexOptions.Singleline
才能让.
匹配行尾(混淆I)我被自己抓住了; - )。
答案 2 :(得分:1)
以下将解决这个问题:
/\*<parameters>\*/(.|\r|\n)*/\*</parameters>\*/
或者,如果您想从匹配本身中排除外部令牌:
(?<=/\*<parameters>\*/)(.|\r|\n)*(?=/\*</parameters>\*/)
答案 3 :(得分:0)
在打开正则表达式“Multiline”选项后,您的正则表达式应与您指定的所有文本匹配。
答案 4 :(得分:0)
正如Alex所说,你可以使用Singleline修饰符让点匹配换行符(\ r和\ n)。您还可以使用内联表单 - (?s)
- 在正则表达式中指定它:
(?s)/*<parameters>*/(?<value>.*?)/*</parameters>*/另请注意不情愿的量词:“
.*?
”。这是为了防止文本中存在多个潜在匹配;否则,您将从第一个<parameters>
代码到最后一个</parameters>
代码进行匹配。
答案 5 :(得分:-1)
我不想给你这个问题的鱼,所以你可能想尝试一下名为Expresso的Ultrapico免费工具(注册)。
我和Regex偶然发现了几次,Expresso在所有场合都节省了一天。