所以我的公司正在为他们的移动网站使用第三方,我们有一个控制台来更新一些代码并通过它们控制内容。其中一项是搜索和替换功能,可以更新站点的代码。唯一的一点是,它使用了很多复杂的正则表达式代码,我似乎无法找到关于复杂内容的好教程。所以这里是他给我的例子,棍子抓住段落标签并把它放在链接
搜索
(#d6d6d4.+?>.+?<p><a.+?>.+?)</a>(.+?)</td>
替换为
$1$2</a></td>
$ 1和$ 2代表什么?我知道它可能与其中一个有关。+?但我不确定哪一个。如果有人知道请帮助我。我在下面的代码中添加了正则表达式变量旁边的数字
(#d6d6d4.+?**[1]**>.+?**[2]**<p><a.+?**[3]**>.+?**[4]**)</a>(.+?**[5]**)</td>
答案 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/
上有3,500多个正则表达式库的网站时,很难自己编写$变量用于存储'匹配': - 第一场比赛$ 1;等等2美元等等。