正则表达式搜索并替换替换是搜索词的mod的位置
我很难找到解决方案,我很确定正则表达式支持它。 我不记得正则表达式世界中的概念名称。
我需要搜索并替换特定模式的字符串,但模式可能不同,替换需要“记住”它取代的内容。
例如,假设我有一个任意字符串:134kshflskj9809hkj
我想用括号括起数字,所以结果将是:(134)kshflskj(9809)hkj
找到数字很简单,但如何包围它们?
任何人都可以提供样品或指出我正确的方向吗?
在一些不同的语言中:
// C#: string result = Regex.Replace(input, @"(\d+)", "($1)"); // JavaScript: thestring.replace(/(\d+)/g, '($1)'); // Perl: s/(\d+)/($1)/g; // PHP: $result = preg_replace("/(\d+)/", '($1)', $input);
围绕(\d+)
的括号使其成为“组”,特别是第一个(仅在这种情况下)组,可以在替换字符串中反向引用 。 在某些实现中需要g
标志以使其在单个字符串中多次匹配)。 替换字符串非常相似,尽管某些语言将使用\1
而不是$1
,而有些语言将允许两者。
大多数正则表达式替换函数允许您在定义替换字符串时引用正则表达式中指定的捕获组(也称为反向引用)。 例如,使用PHP中的preg_replace()
:
$var = "134kshflskj9809hkj"; $result = preg_replace('/(\d+)/', '(\1)', $var); // $result now equals "(134)kshflskj(9809)hkj"
其中\1
表示“正则表达式中的第一个捕获组”。
另一个有点通用的解决方案是:
搜索: /([\d]+)([^\d]*)/g
替换: ($1)$2
([\d]+)
:匹配一组一个或多个数字并将它们保留在一个组中
([^\d]*)
:匹配一组非数字,并保留它们。 \D
也可以在这里工作。
g
:表示这是一个全局表达式,在输入上多次工作。
($1)
:在替换块中,parens没有特殊含义,因此输出第一组,用parens包围它。
$2
:输出第二组
我使用了一个非常好的在线正则表达式工具来测试我的表达。 下一步是将它应用于您正在使用的语言,因为每个语言都有自己的实现细微差别。
如果您只是想要搜索数字并替换为由parens包围的找到的正则表达式,则不需要反向引用(分组)。 在替换字符串中使用整个正则表达式匹配更简单。
例如对于perl
$text =~ s/\d+/($&)/g;
这将搜索一个或多个数字,并替换为匹配周围的parens(由$&指定),并使用尾随g来查找和替换所有匹配项。
请参阅http://www.regular-expressions.info/refreplace.html以获取正则表达式语言的正确语法。
根据您的语言,您希望匹配群组。
所以通常你会以一种forms制作一个模式
([0-9]{1,})|([a-zA-Z]{1,})
然后,您将迭代结果组(特定于您的语言)。