Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Regex.Replace-也在替换字符串中搜索匹配项_C#_Regex - Fatal编程技术网

C#Regex.Replace-也在替换字符串中搜索匹配项

C#Regex.Replace-也在替换字符串中搜索匹配项,c#,regex,C#,Regex,鉴于以下情况: string input = "xSxSx"; var result = Regex.Replace(input, "xSx", "xTx"); // result == "xTxSx" 看起来替换字符串没有用于进一步的匹配,这就是为什么我们没有得到预期的“xtx” 如何解决这个问题?是否有某种特殊的符号告诉引擎使用第一个替换已到位的字符串查找第二个匹配?这是因为,一旦匹配了字符,就不会再次匹配。因此,第二次匹配的字符串是Sx,而不是xSx 您需要在此处使用环视: Regex

鉴于以下情况:

string input = "xSxSx";

var result = Regex.Replace(input, "xSx", "xTx");
// result == "xTxSx"
看起来替换字符串没有用于进一步的匹配,这就是为什么我们没有得到预期的“xtx”


如何解决这个问题?是否有某种特殊的符号告诉引擎使用第一个替换已到位的字符串查找第二个匹配?

这是因为,一旦匹配了字符,就不会再次匹配。因此,第二次匹配的字符串是
Sx
,而不是
xSx

您需要在此处使用环视:


Regex.Replace(input,”(?只要对任何更复杂的东西使用一个循环,你不能简化为一个look[向前/向后]

    string test = "xSxSx";
    string result = string.Empty;
    while(true) {
        result = Regex.Replace(test, "xSx", "xTx");
        if(result != test) 
            test = result;
        else 
            break;
    }

您可能不希望这成为默认行为,因为这样
Regex.Replace(输入,“a”,“aa”)
将产生一个无限循环。
    string test = "xSxSx";
    string result = string.Empty;
    while(true) {
        result = Regex.Replace(test, "xSx", "xTx");
        if(result != test) 
            test = result;
        else 
            break;
    }