Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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# 替换与正则表达式模式c匹配的字符串中的指定字符串#_C#_Regex_Replace_Pattern Matching_Regex Group - Fatal编程技术网

C# 替换与正则表达式模式c匹配的字符串中的指定字符串#

C# 替换与正则表达式模式c匹配的字符串中的指定字符串#,c#,regex,replace,pattern-matching,regex-group,C#,Regex,Replace,Pattern Matching,Regex Group,我有一个多行文本框,其中包含以下字符串URL: http://foodfacts.ambigouos.com http://articles.ambigouos.com http://www.dirtshirt.org 我想用Regex替换/更新上述URL中的字符串http到https,该URL将ambigous.com作为域 预期输出: multilinebox.text = Regex.Replace(multilinebox.text, @"^http?://[a-zA-Z]*(\.am

我有一个多行文本框,其中包含以下字符串URL:


http://foodfacts.ambigouos.com
http://articles.ambigouos.com
http://www.dirtshirt.org
我想用Regex替换/更新上述URL中的字符串
http到https
,该URL将
ambigous.com
作为域

预期输出:

multilinebox.text = Regex.Replace(multilinebox.text, @"^http?://[a-zA-Z]*(\.ambigouos\.com)$", "$1", RegexOptions.IgnoreCase);
https://foodfacts.ambigouos.com
https://articles.ambigouos.com
http://www.dirtshirt.org
下面的代码已尝试但不起作用:

multilinebox.text = Regex.Replace(multilinebox.text, @"^http?://[a-zA-Z]*(\.ambigouos\.com)$", "$1", RegexOptions.IgnoreCase);

提前感谢。

您可以利用字符串位于行的开头这一事实(即,您应该使用
RegexOptions.Multiline
标志编译正则表达式),您不需要在此处检查字符串/行的结尾。此外,还需要围绕字符串的整个非固定部分设置分组构造

如果只需要处理行开头的匹配项,请使用

Regex.Replace(multilinebox.text, @"^http://((?:[^/]*\.)?ambigouos\.com)", "https://$1", 
     RegexOptions.IgnoreCase | RegexOptions.Multiline);
如果要处理字符串中任何位置的匹配请删除
^
| RegexOptions。多行
使用

Regex.Replace(multilinebox.text, 
          @"http://((?:[^/]*\.)?ambigouos\.com)", 
          "https://$1", 
          RegexOptions.IgnoreCase);

Detasils

  • ^
    -行的开头(因为使用了
    RegexOptions.Multiline
  • http://
    -文字子字符串
  • ((?:[^/]*\)?ambigous\.com)
    -捕获组1:
    • (?:[^/]*\)?
      -除
      /
      之外的任何0+字符的可选序列,然后是
    • ambigous\.com
      -文字子字符串

您可以向求反字符类添加
\r\n
以避免跨行溢出,即
[^/]
=>
[^/\r\n]

您可以利用字符串位于行的开头这一事实(即,您应该使用
RegexOptions.Multiline
标志编译正则表达式),您不需要在此处检查字符串/行的结尾。此外,还需要围绕字符串的整个非固定部分设置分组构造

如果只需要处理行开头的匹配项,请使用

Regex.Replace(multilinebox.text, @"^http://((?:[^/]*\.)?ambigouos\.com)", "https://$1", 
     RegexOptions.IgnoreCase | RegexOptions.Multiline);
如果要处理字符串中任何位置的匹配请删除
^
| RegexOptions。多行
使用

Regex.Replace(multilinebox.text, 
          @"http://((?:[^/]*\.)?ambigouos\.com)", 
          "https://$1", 
          RegexOptions.IgnoreCase);

Detasils

  • ^
    -行的开头(因为使用了
    RegexOptions.Multiline
  • http://
    -文字子字符串
  • ((?:[^/]*\)?ambigous\.com)
    -捕获组1:
    • (?:[^/]*\)?
      -除
      /
      之外的任何0+字符的可选序列,然后是
    • ambigous\.com
      -文字子字符串

您可以将
\r\n
添加到否定字符类以避免跨行溢出,即
[^/]
=>
[^/\r\n]

下面的代码已尝试但不起作用
它不起作用的具体程度如何?您可以定义
不起作用
?您知道您的正则表达式与
http://
htt://
匹配,对吗?您可能不需要regexp,只需检查行
是否包含(“ambigoos.com”)
,然后执行
替换(“http://”,“https:/”)
@trailmax如果only OP不想确保仅更改HTTP链接,则为真。
下面的代码已尝试但不起作用
具体不起作用的原因是什么?能否定义
不起作用
?您知道您的正则表达式与
HTTP://
htt://
匹配,对吗?您可能不需要正则表达式,只需检查是否需要正则表达式ne
包含(“ambigous.com”)
,然后执行
。替换(“http://”、“https://”)
@trailmax,如果only OP不想确保只更改HTTP链接,则为true。
http://foodfacts.ambigouos.com/
与上述正则表达式不匹配,因此不替换为
https://foodfacts.ambigouos.com/
suggest!!@PPB.这里是@PPB您的意思是说您不需要在开始时匹配这些URL吗行,但在字符串中的任何位置?@PPB,但这意味着您希望在行的开头匹配
http://
。无需删除
^
行的开头锚。是否添加了
RegexOptions。多行
选项?显示您在IDEONE的确切代码。让我们来看看。
http://foodfacts.ambigouos.com/
不适用使用上述正则表达式,因此不替换为
https://foodfacts.ambigouos.com/
suggest!!@PPB。这里是。@PPB您的意思是说您不需要在行首匹配这些URL,而是在字符串中的任何位置?@PPB但这意味着您要在行首匹配
http://
。无需删除
>^
line-anchor的开始。您是否添加了
RegexOptions.Multiline
选项?显示您在IDEONE的确切代码。让我们看看。