使用替换变量搜索并替换为Regex

时间:2012-12-27 18:06:17

标签: regex

所以我的公司正在为他们的移动网站使用第三方,我们有一个控制台来更新一些代码并通过它们控制内容。其中一项是搜索和替换功能,可以更新站点的代码。唯一的一点是,它使用了很多复杂的正则表达式代码,我似乎无法找到关于复杂内容的好教程。所以这里是他给我的例子,棍子抓住段落标签并把它放在链接

搜索

(#d6d6d4.+?>.+?<p><a.+?>.+?)</a>(.+?)</td>

替换为

$1$2</a></td>

$ 1和$ 2代表什么?我知道它可能与其中一个有关。+?但我不确定哪一个。如果有人知道请帮助我。我在下面的代码中添加了正则表达式变量旁边的数字

(#d6d6d4.+?**[1]**>.+?**[2]**<p><a.+?**[3]**>.+?**[4]**)</a>(.+?**[5]**)</td>

3 个答案:

答案 0 :(得分:19)

$ 1和$ 2代表正则表达式中捕获组的文本。捕获组是括号内的内容。

 (        // start first capture group
 #d6d6d4  // match #d6d6d4
 .+?>     // any character, non-greedy, up to '>'
 .+?<p>   // any character, non-greedy, up to <p>
 <a.+?>   // an <a..> tag, consuming everything up to '>'
 .+?      // all characters from <a> to </a>
 )        // close the first capture group before the '</a>'
 </a>     // literal '</a>' 
 (        // start second capture group
 .+?      // match all, non-greedy up to '</td>'
 )        // close capture group before '</td>'
 </td>    // literal '</td>'

所以,如果你有这个字符串:<td color=#d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo link</a>some more text</td>

$ 1匹配:#d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo link $ 2匹配:some more text

因此字符串转换为: <td color=#d6d6d4 foo=bar>Hello, world<p><a href=http://foo.com>foo linksome more text</a></td>

这基本上意味着</a>标记在some more text之后移动(或者如果您愿意,可以在</td>之前移动)

答案 1 :(得分:4)

$ 1和$ 2变量被捕获的内部模式匹配(parens)$ 1是第一个paren组,$ 2是第二个。

答案 2 :(得分:1)

我认为http://rubular.com/是正则表达式的一个很好的培训工具,因为它是交互式的,您可以继续针对不同的文本尝试不同的模式,并立即看到结果。

它包含http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UJ的链接,这是正则表达式的一个很好的基本指南。

还有http://www.regular-expressions.info/

为什么在http://regexlib.com

上有3,500多个正则表达式库的网站时,很难自己编写

$变量用于存储'匹配': - 第一场比赛$ 1;等等2美元等等。

相关问题