Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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查找捕获组的数量_C#_Regex_Replace - Fatal编程技术网

C#regex查找捕获组的数量

C#regex查找捕获组的数量,c#,regex,replace,C#,Regex,Replace,假设此模式用于替换字符串中的所有URL string domains = "(gl|me|com|ir|org|net|edu|info|me|ac|name|biz|co|pro|ws|asia|mobi|tel|eu|in|ru|tv|cc|es|de|ca|mn|bz|uk|us|au)"; string pattern = @"([\n ]|^)?(((https?|ftp)://)?(www\.)?([\w\d-]+\.)+" + domains + @"([/][\w\d_~:?#

假设此模式用于替换字符串中的所有URL

string domains = "(gl|me|com|ir|org|net|edu|info|me|ac|name|biz|co|pro|ws|asia|mobi|tel|eu|in|ru|tv|cc|es|de|ca|mn|bz|uk|us|au)";

string pattern = @"([\n ]|^)?(((https?|ftp)://)?(www\.)?([\w\d-]+\.)+" + domains + @"([/][\w\d_~:?#@!%$&'()*+,;=`\[\]\.\-]+)*)([\n ]|$)?";
我想用
\uurl\ucode>标记替换所有URL,但将分隔符保留在字符串的左侧和右侧

据我所知,
$1
指的是模式开头的
([\n]| ^)
,但我找不到模式结尾的
([\n]| ^)
的正确数字

Regex.Replace(data, pattern, "$1_URL_$?"); // what should be replaced by ?
我测试了2-8美元,没有人是正确的


对于这种情况,是否有任何特定的规则?

根据您的要求,您似乎不需要捕获还押组,因此可以使用非捕获组

试试这个:

string pattern = @"([\n ]|^)?(?:(?:(?:https?|ftp)://)?(?:www\.)?(?:[\w\d-]+\.)+" + domains + @"(?:[/][\w\d_~:?#@!%$&'()*+,;=`\[\]\.\-]+)*)([\n ]|$)?";

然后,您只需为第二组使用
$2

此外,我建议您只需使用一个捕获组,并将其替换为
\uurl


演示:

根据您的需求,您似乎不需要捕获还押组,因此可以使用非捕获组

试试这个:

string pattern = @"([\n ]|^)?(?:(?:(?:https?|ftp)://)?(?:www\.)?(?:[\w\d-]+\.)+" + domains + @"(?:[/][\w\d_~:?#@!%$&'()*+,;=`\[\]\.\-]+)*)([\n ]|$)?";

然后,您只需为第二组使用
$2

此外,我建议您只需使用一个捕获组,并将其替换为
\uurl


演示:

由于您只需要与完整URL匹配的组,请将所有内括号转换为:
()
(?:)
。您可能还希望将域直接集成到模式中:

([\n ]|^)?((?:(?:https?|ftp)://)?(?:www\.)?(?:[\w\d-]+\.)+(?:gl|me|com|ir|org|net|edu|info|me|ac|name|biz|co|pro|ws|asia|mobi|tel|eu|in|ru|tv|cc|es|de|ca|mn|bz|uk|us|au)(?:[/][\w\d_~:?#\@!%$&'()*+,;=`\[\]\.\-]+)*)([\n ]|$)?
然后,前锚定被捕获到
$1
中,后锚定被捕获到
$3
中。或者,如果愿意,也可以将组
$2
中剩余的URL转换为非捕获组


因为您只需要与完整URL匹配的组,所以请将所有内括号转换为:
()
(?:)
。您可能还希望将域直接集成到模式中:

([\n ]|^)?((?:(?:https?|ftp)://)?(?:www\.)?(?:[\w\d-]+\.)+(?:gl|me|com|ir|org|net|edu|info|me|ac|name|biz|co|pro|ws|asia|mobi|tel|eu|in|ru|tv|cc|es|de|ca|mn|bz|uk|us|au)(?:[/][\w\d_~:?#\@!%$&'()*+,;=`\[\]\.\-]+)*)([\n ]|$)?
然后,前锚定被捕获到
$1
中,后锚定被捕获到
$3
中。或者,如果愿意,也可以将组
$2
中剩余的URL转换为非捕获组

[\w\d\u因为
\w
已经包含了它,
\w\d\u因为
\w
已经包含了它,所以没有必要。