为什么不是开始,结束于在C#上使用regularrexpression?

时间:2012-07-20 14:23:31

标签: c# regex

为什么我的正则表达式找不到我的字符串?

 Regex.Replace(" SCRIPT language=Javascript src=\"\"\r\ntype=text/javascript ",
    "^language=Javascript$",
    "language=\"Javascript\"",
    RegexOptions.Multiline | RegexOptions.Compiled
);

^language=Javascript$无效。如果我删除它有效,但我想确保一个部分相似的字符串不会被替换(它已经在我的测试中发生)。字符串不是常量,我实际上使用变量,但这只是我使用的一种情况。有什么帮助吗?

1 个答案:

答案 0 :(得分:6)

嗯,这是因为^代表字符串的开头,$代表字符串的结尾。你的正则表达式根本无法匹配。你可以用

\blanguage=Javascript\b

作为解决方法,如果您只是想确保foolanguage=Javascript不匹配。但这在很大程度上取决于您期望的数据以及该方法的内容。更安全的方式是

(?<= )language=Javascript(?= )

这将确保比赛前后有空格。你可以从那里使它变得更加复杂(和可靠),例如

(?<= )language=Javascript(?= |>)

甚至匹配<script type='text/javascript' language=Javascript>