点操作符
在正则表达式中,点 .
匹配几乎任何字符。唯一不匹配的字符是换行符。要使点匹配所有字符,必须启用所谓的单行模式(也称为“点全部”)。
在C#中,可以使用 RegexOptions.Singleline
来指定。您还可以将其嵌入模式中,如 (?s)
。
参考资料
关于元字符和转义
.
并不是唯一的正则表达式元字符。其他的元字符包括:
( ) { } [ ] ? * + - ^ $ . | \
根据它们出现的位置,如果您希望这些字符意味着字面意义(例如“.”作为句号),则您可能需要进行所谓的“转义”。这是通过在字符前加上“\”来完成的。
当然,对于C#字符串文字,"\\"也是转义字符。要获得字面意义的"\\",您需要在字符串文字中将其加倍(即"\\"是长度为一的字符串)。或者,C#还具有所谓的@-quoted字符串文字,其中不处理转义序列。因此,以下两个字符串相等:
"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"
由于在正则表达式中经常使用\
,因此通常使用@
引用来避免过度重复。
参考资料
关于字符类
正则表达式引擎允许您定义字符类,例如[aeiou]
是包含5个元音字母的字符类。您还可以使用-
元字符来定义范围,例如[0-9]
是包含所有10个数字字符的字符类。
由于数字字符使用非常频繁,因此正则表达式还提供了一种简写符号,即\d
。在C#中,这也将匹配其他Unicode字符集中的十进制数字,除非您使用RegexOptions.ECMAScript
,否则它严格只匹配[0-9]
。
参考文献
相关问题
将所有内容整合起来
看起来以下内容适用于您:
@-quoting digits_ _____anything but ', captured
| / \ / \
new Regex(@"GuestbookWidget\('\d*', '([^']*)', 500\);", RegexOptions.IgnoreCase);
\/ \/
escape ( escape )
请注意,我已经稍微修改了模式,使其使用否定字符类而不是勉强通配符匹配。如果您允许在输入字符串中转义
'
,则这会导致行为上的轻微差异,但是两种模式都不能完美处理此情况。但是,如果您不允许转义
'
,则这种模式绝对更好。
参考资料
\d+
。(在@""
字符串内部) - SLaks