如何将此文本与正则表达式匹配?

时间:2009-05-29 01:07:58

标签: c# regex

我试图制作一个正则表达式来匹配一段代码,但没有成功。 该表达式在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

6 个答案:

答案 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在所有场合都节省了一天。