RegEx在Dreamweaver中查找/replace – 将HTML粘贴为variables?

我必须将电子表格数据(名称,图像名称和生物)转换为HTML,因此我使用RegEx查找/replaceDW中的variables,这很容易。 问题是,一列包含HTML(段落和斜体主要)的生物,RegEx忽略了“行”的原因超出我的研究能力。

我不想剥离,然后手动添加HTML,所以告诉我的方式!

TL; DR:有没有办法将HTML粘贴为RegExvariables?


这里有一些示例表格数据我很快从Excel粘贴/格式到DW:

<tr> <td>James Brian Hellwig</td> <td>James_Brian_Hellwig</td> <td><p>Lorem ipsum dolor sit amet, <em>consectetur adipisicing</em> elit. Sunt, ut iste tempore laborum aperiam nostrum obcaecati neque natus adipisci fugit. </p> <p>Dolores, eligendi animi ea totam nobis cumque ullam eveniet accusamus!</p></td> </tr> <tr> <td>Jiminy Cricket</td> <td>Jiminy_Cricket</td> <td><p>Lorem ipsum dolor sit amet, <em>consectetur adipisicing</em> elit. Sunt, ut iste tempore laborum aperiam nostrum obcaecati neque natus adipisci fugit. </p> <p>Dolores, eligendi animi ea totam nobis cumque ullam eveniet accusamus!</p></td> </tr> 

这里是“查找”正则expression式:

 <tr> <td>([^<]*)</td> <td>([^<]*)</td> <td>([^<]*)</td> </tr> 

这是“replace”正则expression式:

 <div> <img class="floatleft" src="$2.jpg" alt="$1" /> <h2 class="name">$1</h2> $3 </div> 

我会或者亲吻或者为第一个人买一杯啤酒来回答这个问题。 你的select。

你的问题是[^<]*匹配除了开angular尖括号之外的任何东西。 一般来说这是个好主意,所以你不会意外地在标签边界上进行匹配,但在这种情况下,这是不幸的,因为在<td>之后有一个<p>标记。

所以我提出了一个不同的解决scheme。 允许其他标签,而不是<td>标签内的<td>标签:

 <tr> <td>((?:(?!</?td)[\s\S])*)</td> <td>((?:(?!</?td)[\s\S])*)</td> <td>((?:(?!</?td)[\s\S])*)</td> </tr> 

说明:

 (?: # Start non-capturing group that matches... (?!</?td) # (unless we're at the start of a <td> or </td> tag) [\s\S] # ... any character (whitespace or non-whitespace). )* # Repeat as needed 

您可以使用

 <tr> <td>.*?</td> <td>.*?</td> <td>.*?</td> </tr> 

说明: (点)匹配除换行符以外的任何字符。 如果你需要跨越多行,你可以像Timbuild议的那样使用[\ s \ S]

*使它看起来0或更多的 (点)。 这使得我们不愿意,也就是说我们尽可能地抓住几个字符,同时仍然匹配END TD标签。

由于TR和TD标签之间有空格,因此我们必须将其包含在我们的正则expression式中。 对不起,我早该抓住了 另外,我们不能在正则expression式中放置空格,除非我们正在寻找一个空格,这就是为什么正则expression式看起来像一串长长的复杂字符。 这是它应该是这样的:

 <tr>\s*<td>.*?</td>\s*<td>.*?</td>\s*<td>.*?</td>\s*</tr> 

正如你所看到的,我用\ s表示一个空格字符,后跟一个*表示0或更多次。

既然你有相同的模式重复3次,你实际上可以使用下面的符号重复:

 <tr>\s*(<td>.*?</td>\s*){3}</tr> 

重复符号很好。 比方说,你不仅要匹配正好有3个TD的表,而且要匹配1到4个TD的表。 你会使用:

 <tr>\s*(<td>.*?</td>\s*){1,4}</tr> 

仅供参考,通过使用Dreamweaver XSLT文件dynamic地将XML数据添加到HTML,同事在上面的示例中find了使用RegEx的一个很好的select。 我们只需使用XML映射的电子表格来导出XML,并更新内容。

一旦设置了电子表格的模式,并且使用适当的HTML“重复区域”对XSL文件进行格式化,就可以顺利启动。

资源:

  • 如何将Excel 2010工作表导出到XML
  • 在网页上使用XML和XSL(adobe.com)