正则表达式匹配FrontPage 2003中的多个空格

时间:2012-10-03 19:32:39

标签: regex frontpage

我使用FrontPage 2003,我想使用一个查找空格(多个空格)的正则表达式。这忽略了1个空格,但只匹配多个空格(在文本中,没有在html代码中找到)。

4 个答案:

答案 0 :(得分:1)

仅进行更新...我最近正在使用FrontPage的奇怪RegEx,并且想起了关于stackoverflow的一些问题,因此我进行了查找。好的,FP的RegEx确实有问题,因此在PCRE中搜索大约8个字符的内容,最好在FP中详细说明,以免出现问题。

要在FrontPage的源代码部分中找到2个或更多相邻的空格,您需要重复搜索 或在其前后有一个空格。要创建正确的搜索/替换项以获取大部分信息,我们需要记住:

首先,FP的编辑器将任何一个以上的空格转换为仅一个空格(通常),并以重复的 开头,这样空格的总数是相同的,但是在源代码中会出现看起来像这样:

      (请注意实际的空格在末尾)

这就是FP编辑器对7个空格键的点击所做的事情。

第二,请注意,如果像上述FP编辑器创建的组那样在组附近添加一堆空格(甚至只是一个),则可以将其添加为普通的空白字符,也可以将其添加为 -取决于它的相邻位置。

因此,当您使用WYSIWIG编辑器随时间添加多个空格,然后FP将您添加的新空格转换成 的混合形式时,您很容易以重复和交替的空格和 个字符结尾和空格字符,只要将它们附加到其他任何空格,仅当新添加的空格导致两个空格彼此相邻时,才将空格转换为 。 FrontPage从来不会真正遍历整个文件来查找由空格和 字符交替组成的空格字符串,因此您可能会在一个大而长的字符串中混用两者。它们将交替出现,并且在这种交替中可以重复出现 个字符,但可能不会重复出现ascii空白。

因此,要构建FrontPage RegEx(在我以前的文章here中,提供了一个解释FPRE(LOL)差异的优质页面的链接)–您需要在任意一个四种形式:

 (最常见的是 ,后跟一个空格)

...或者相反: (空格然后是 

...或2个或更多重复的 代码:  ,不带空格

...或者,很少有两个普通的空格: ...很少,因为FP编辑器无法删除-注意通常是因为它们不在可见的HTML文本中,而是在HTML标记中,或者脚本之类的东西,所以只用一个可能替换它们就不会弄乱这些元素,但是要注意。

好的,让我们开始吧...

我们需要构造一个RegEx(使用FrontPage怪异的RegEx)查找/替换。

我们的FIND必须要求至少存在两个相邻空间的四种可能布置中的至少一种:相邻两个相同类型的空间,或者每个相邻区域的一个。否则RegEx模式必须与文本不匹配,以避免替换可能无害的SINGLE空间,但是为什么要添加不必要的内容?

对于这种可能以4种可能的排列方式出现的2个相邻空格的模式(上面),我们将使用一组圆括号(我们无需在此处捕获-奇怪的FP RegEx捕获是使用花括号完成的, btw)。

在这些大括号内,我们将放置所有匹配的4种可能的模式,并用管道将它们分开。表示“ OR”命令。然后,在右括号之后,我们将放置一个+分隔符,以表示我们需要找到这4个组合中的至少一个以具有模式匹配。 (同样,否则我们将不处理2个或更多的空格,因此将其跳过。)

然后,由于任何类型的空间都可以在匹配模式之前或之后出现-假设存在一堆乱七八糟的字符串,这是Frontspace中常见的,因此我们将添加一些可选的交替空间类型,都使用普通空间和 到我们的搜索字符串,并且每行之后我们都将使用*分隔符,表示其中可以有0个或多个,如果存在,则它们匹配。我们将在所有重要的括号之前放置一系列这些,然后在它们之后放置另一个。为什么?尽可能地抓取尽可能多的相邻空间,就像FEW的查找/替换操作一样,而不必重复查找/替换操作即可找出所有真正冗长的杂物。

因此,如果我们像这样进行搜索,那么无论您的页面如何混乱,它都是联合国的,您将需要在一个页面或整个网站上运行多次,除非您拥有一个真正巨大的空间混乱,在这种情况下,只需再次运行即可。保证第二次会得到一切。 (我在一个非常混乱的FP页面上尝试了它……全部都得到了。)

是的。是的,我们可以在PCRE中甚至可以在FrontPage中将其缩短很多,但是请不要尝试,因为FP RegEx有错误,如果您考虑得太多,它将丢失某些东西或选择过多的东西,甚至更糟,它只会锁定FP或使其崩溃。

查找并替换 找: 是-查找源代码 是-使用正则表达式 不匹配的情况 仅查找整个单词

*(\&nbsp\;)* *(\&nbsp\;)* *( \&nbsp\;|\&nbsp\; | \&nbsp\;\&nbsp\;)+ *(\&nbsp\;)* *(\&nbsp\;)* *

(顺便说一句,上面的字符串以纯空白-ASCII十六进制20开头。以星号结尾。)

替换为:  (没有前导空格和尾随空格)

运行它,您就完成了。首先请确保在一个混乱的页面上进行尝试。

它是在FrontPage 2003上创建的,它与FP RegEx相比,比旧版本要好一些,但是FP 2002大致相同。

是的,它又大又丑,但同样,请不要过分思考FP RegEx,也不要让IT进行任何思考,否则它将使您崩溃或加紧搜索/替换。只需使用那件长而丑陋的大事就可以完成。

祝你好运。这将起作用。

答案 1 :(得分:0)

您可以使用正则表达式/ {2,}/来匹配2个或更多空格。不确定正则表达式在FrontPage中是如何工作的,因为我没有使用它,所以我真的不能给出更多细节。

答案 2 :(得分:0)

我不熟悉FrontPage和Notepad ++以及您可能/必须在其上下文中使用的正则表达式引擎,因此我将仅限于一些一般性评论。

要在文本中找到匹配(两个空格或更多),但不在html标记内(即在<和>之间),您可以使用正则表达式模式,如:

<.*?>|(?<spaces>\s{2,})

如果正则表达式引擎中的{n,}说明符存在问题,您可以用\ s \ s +

替换\ s {2,}

此外,如果&lt;和/或&gt;在你的正则表达式引擎中是特殊的(元)字符,你需要使用它们。 (同样,我不熟悉FrontPage和Notepad ++环境。)

答案 3 :(得分:0)

Frontpage在其代码编辑器中不允许连续两个空格 - Frontpage编辑器会自动将html中的第二个空格和任意连续空格更改为&nbsp;(ASCII非断开空格)代码。

在没有问你的情况下,在编辑过程中,或者即使它正在做它的管理和#34;网站重新计算或其他任务,并找到您可能已添加不同编辑器的双空格。

但是,如果你在代码框中以这种方式编辑它,它将允许你用&nbsp;元素散布空格,或者至少它通过FP2003的最新版本完成,所以它可能是还是这样。

另外,它将允许编辑器中一行末尾的空格,然后在编辑器的下一行,它将允许另一个空格,而通常将不会转换为{ {1}} - 但这有时会因编辑者对转换这些内容的需求而有所不同。例如,它在转换多个空格时更具侵入性,即使在代码中以行分隔,如果它在span标记或div标记内,或者有时在表格单元格中(特别是如果嵌套)。 / p>

FrontPage的构建是为了打扰你,让你不要做你认为你不应该根据当时宽松的html标准做的事情。 (是的,它几乎没有满足那些微不足道的标准,并且标签和样式很混乱,但它确实尝试过,它产生的东西通常在大多数浏览器上都可以完全查看,即使在今天也是如此。)

因此,您希望找到:(空格)&nbsp;或其相反顺序,并将其全部替换为&nbsp;以确保安全。

您可以在FrontPage自己的搜索/替换中执行此操作,并检查_IGNORE WHITE SPACE,以便跨越HTML代码行中的间隔,并跨越代码中仅用于编码的标签。

如果您熟悉RegEx,可以创建一个捕获组,找到这些方法中的任何一种来表示您将最小值设置为2的空间,并将最大值设置为您想要的最大值...说200 。

看起来就像这样(匆忙打字,所以不太可能完全正确,但是你明白了)如果你在&#34;正常&#34; PCRE RegEx:

&nbsp;

但FrontPage有自己的RegEx,随着每个新版本的FrontPage发生了变化,只是为了让它变得有趣。括号几乎全部使用不同于PCRE RegEx,我认为选择捕获组的方式需要不同的分组符号放置。

现在,由于网站消失,FrontPage自己的RegEx特殊字符集很少被记录,但这里有很多参考文献: http://www.softpanorama.org/Office/Frontpage/regular_expressions.shtml

这些特殊的RegEx规则的Microsoft Office链接已经死了,但是我把它放在下面,它仍然链接到MSDN上的许多页面和MS的其他地方的各种帮助论坛:

http://office.microsoft.com/assistance/preview.aspx?assetid=hp030923241033&ctt=4&origin=ch063729491033

请记住,您始终可以使用一个编辑器,该编辑器允许您使用更标准的RegEx来浏览文件并查找并替换所有这些文件,而不必担心违反FrontPage的古怪RegEx规则。这些编辑包括:

NoteTabPro,Note ++,jEdit,UltraEdit,... TONS MORE

请记住,如果您从FrontPage软件的OUTSIDE编辑FrontPage页面,则需要转到 TOOLS&gt;在您完成并重新输入软件后重新调整超级链接。如果您没有更改任何链接,那么这样做并不重要 - 因为基本上这样做只会更新&#34;阴影&#34;每个更改文件的.htm(l)文件 - 影子文件位于文件所在目录的/ _vti_cfg /子目录中,它主要只保留实际.htm(l)文件中的链接轨道。然后收集该信息并将站点地图/链接地图/导航地图记录在网站的根目录&_vti_pvt /目录中,其中它建立了一个巨大的链接列表(双向)名称为linkinfo.btr和doctodep.btr以及deptodoc.btr的文件。

上面的^^^是非常重要的(recalc链接),即使你认为你在FrontPage之外播放文件时打扰任何超链接,这就是为什么:

即使您只通过FTP发布 - 使用-no- FP Server Extensions,您仍然需要这些文件是最新的。当您通过FTP发布时,从技术上讲,FrontPage将此视为使用DTI(Design-Time-Includes)而不是Server Includes,因此预合并您的页眉/页脚等,并调整许多位置 - 相对关系的超链接,它在放置页面之前完成所有操作。所以你仍然需要这些/ _vti_whatever /目录及其设计方面的各种文件(MS-Win PC)来处理任何FrontPage功能仍然可行,即使服务器上没有(危险的!)FPSE。

(切实但很有价值:如果您在FrontPage中使用大型网站(仍在)并通过FTP上传,则需要执行这些重新计算快速并创建网站报告快速,所以找到其中一个页面,告诉你如何MkLink或以其他方式将\ Cache \ IE设置到RAMdisk或至少一个SSD驱动器上的位置,因为那时\ Cache \ IE \ FrontPageTempDir是一个更快的驱动器。当我清除FP2003并使用它来更新一个包含60,000个文件和520万个链接的旧网站时,我将其设置为缓存在RAMdisk上,并在几分钟内重新计算,相对于旧方式的几个小时。页面报告相同速度或速度更快,即使结果是500万个链接或60k文件的列表。)

无论哪种方式,总是:工具&gt;在您更改了FrontPage客户端软件之外的任何文件后重新计算超链接

最后一次删除重复空格 - 在PUBLISH SETTINGS中有一个&#34;删除重复空格&#34;复选框附近的某个位置,您可以选择&#34;优化已发布的HTML。&#34;精确的复选框可能已经在FP2002之后消失了,或者可能消除了内置于&#34;优化&#34;选项作为不可更改的默认值。您可以在您的版本上测试它。

人们可能会嘲笑FrontPage,其编辑器现在创建的HTML存在问题,但它很快并处理了大量文件,并且在您不想迁移时仍能正常工作。它创建的HTML代码远程接近最新,嵌套表格可能显示所有奇怪,特别是在Firefox中,通常在Chrome中...但是,你可以迁移到几乎相同的(现在免费) ,以及旧的和不受支持的)Microsoft ExpressionWeb 4.然后您可以选择您的HTML标准,包括XHTML-transitional或HTML5(前者效果更好)。但是这样做,你在FrontPage中丢失了大量的报告,拖放和其他一些东西。您获得了不可编辑的区域,这些区域可能很挑剔但功能齐全,并且您可以减少更清晰上传的开销。

总结:尝试在FrontPage中执行此操作时,不要太烦恼。从可以快速处理它的编辑器执行,然后运行您的recalc。应该没问题,除了FP编辑器的下半部分(WYSIWYG部分)的视觉外观通常依赖于多个空间来显示布局这一事实,但是......嘿,2003年是15年前的现在。 : - )

最适合你。