12

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

搜索

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

用。。。来代替

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

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

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

3 回答 3

26

$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>如果你愿意的话就在之前)移动

于 2012-12-27T18:31:32.567 回答
5

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

于 2012-12-27T18:11:04.383 回答
2

我认为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 美元,以此类推。

于 2012-12-27T18:10:31.493 回答