dhi*_*chl 5 .net c# regex exception
我有以下内容:
文本:
field id ="25"ordinal ="15"value ="&$ 01234567890- $ 2000-"
正则表达式:
(?<=值= ").*(?=")
替换字符串:
&$ 09876543210- $ 2000-
当我在Expresso中运行Regex Replace时 - 它崩溃了应用程序.
如果我在C#中运行Regex.Replace,我会收到以下异常:
ArgumentException的
解析"&$ 01234567890- $ 2000-" - 捕获组编号必须小于或等于Int32.MaxValue.
Ahm*_*eed 11
$N替换模式中的A 指的是第N个捕获组,因此正则表达式引擎认为您要引用捕获组编号"09876543210"并抛出ArgumentException.如果要$在替换字符串中使用文字符号,请将其加倍以转义符号:& $$09876543210-$$2000-
string input = @"field id=""25"" ordinal=""15"" value=""& $01234567890-$2000-""";
string pattern = @"(?<=value="").*(?="")";
string replacement = "& $$09876543210-$$2000-";
string result = Regex.Replace(input, pattern, replacement);
Run Code Online (Sandbox Code Playgroud)
此外,您的模式目前是贪婪的,可能比预期更匹配.为了使它非贪婪的使用,.*?所以它不会在字符串后面的另一个双引号之外匹配,或者[^"]*它匹配除双引号之外的所有内容.更新的模式将是:@"(?<=value="").*?(?="")"或@"(?<=value="")[^""]*(?="")".如果你从未期望value属性为空,我建议使用+而不是*在任何模式中使用它来确保它匹配至少一个字符.
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |