0

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

4

4 回答 4

1

只是为了更新......我最近正在使用 FrontPage 的奇怪 RegEx,并记得一些关于 stackoverflow 的问题,所以我查了一下。好的,FP 的 RegEx 确实有问题,所以你在 PCRE 中搜索大约 8 个字符的东西,你最好在 FP 中拼出很长的路来避免问题。

要在 FrontPage 的源代码部分中查找 2 个或更多相邻的空格,您需要 在重复 OR 中查找,在它之前或之后有一个空格。要创建正确的搜索/替换以充分利用它,我们需要记住:

首先,FP 的编辑器将任何多于一个空格的序列转换为仅一个空格(通常)在前面加上一个重复的数字, 以便空格的总数相同,但是在源代码中出现的内容如下所示:

      (注意实际的空白空间在最后)

这就是 FP 编辑器使用 7 个空格键轻按时所做的事情。

其次,请注意,如果您在组附近添加一堆空格(甚至只是一个),就像上面 FP 编辑器创建的组一样,它可以将其添加为普通的空白字符,或者可以将其添加为 --取决于它与什么相邻。

 因此,当您使用 WYSIWIG 编辑器随着时间的推移添加多个空格时,您可以轻松地以重复和交替的空格和字符结束,然后 FP 将您添加的新空格转换为混合 字符和空格字符,只需将它们附加到任何其他空格那里, 仅当新添加的空格导致两个空格彼此相邻时,才将空格转换为。FrontPage 从来没有真正遍历整个文件来查找由空格和 字符交替组成的空格字符串,因此您可以在一个大而长的字符串中混杂两者。它们将交替出现,在这种交替中,可以有重复的 字符,但可能不会重复 ascii 空格。

因此,要构建 FrontPage RegEx(我之前的帖子中提供了一个指向解释 FPRE (LOL) 差异的好页面的链接)——您需要以四种形式中的任何一种找到任意 2 个相邻的空格:

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

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

...或 2 个或更多重复 代码:  没有空格

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

好的,让我们一起做...

我们需要构造一个正则表达式(使用 FrontPage 的怪异和错误的正则表达式)查找/替换。

我们的 FIND 必须要求至少存在上述四种可能的两个相邻空间排列中的一种:两个相邻的相同类型的空间,或者每个相邻的一个。否则,RegEx 模式必须 - 不 - 与文本匹配,以避免替换可能无害的 SINGLE 空格,但为什么要使用不必要的东西呢?

对于这种可能出现在 4 种可能排列(上图)中的 2 个相邻空格的模式,我们将使用一组圆括号(我们不需要在这里捕获 - 奇怪的 FP RegEx 中的捕获是用花括号完成的,顺便说一句)。

在这些圆括号内,我们将放置所有 4 种可能匹配的模式,并用竖线 | 分隔它们。指示“或”命令。然后在大括号之后,我们将放置一个 + 分隔符,表示我们需要找到这 4 个组合中的至少一个才能进行模式匹配。(同样,否则我们不会处理 2 个或更多空格,我们会跳过它。)

然后,由于任何类型的空格都可能出现在我们的匹配模式之前或之后——假设存在一个大而凌乱的长串交替类型的空格,并且这些在 FrontPage 中很常见——我们将添加一些可选的交替空间类型,两者都使用正常空格和 , 到我们的搜索字符串,在每个之后我们将使用 * 分隔符,表示可以有 0 个或多个这样的东西,如果有,它们匹配。我们将在我们最重要的圆括号中放置一系列这些,然后在它们之后放置另一个系列。为什么?尽可能多地获取相邻空间,并尽可能多地进行查找/替换操作,而无需重复查找/替换操作以找出所有非常长的杂乱内容。

因此,如果我们像这样进行搜索,无论您的页面随着时间的推移变得多么混乱,您都不太可能需要在一个页面或整个站点上多次运行它,除非您有一个非常大的空间-mess,在这种情况下,只需再次运行它。保证第二次就全部搞定。(我在一个非常混乱的 FP 页面上尝试了它……它得到了所有的东西。)

这里是。是的,我们可以在 PCRE 甚至在 FrontPage 中将其缩短很多,但不要尝试,因为 FP RegEx 是错误的,它会遗漏一些东西或过度选择一些东西,或者更糟糕的是,如果你让它想太多,它只会锁定或崩溃 FP。

查找和替换 FIND:YES-在源代码中查找 YES-使用正则表达式 NO-匹配大小写 NO-仅查找整个单词

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

(顺便说一句,上面的字符串以纯空格开头——ASCII Hex 20。它以星号结尾。)

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

运行它,你就完成了。首先在一个凌乱的页面上尝试以确保。

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

是的,它又大又丑,但同样,不要过度思考 FP RegEx,也不要让 IT 做任何思考,否则它只会让你崩溃或搞砸搜索/替换。只需使用那个又长又丑的大东西就可以了。

祝你好运。这将起作用。

于 2019-02-22T22:40:21.793 回答
0

您可以使用正则表达式/ {2,}/匹配 2 个或更多空格。不知道正则表达式在 FrontPage 中是如何工作的,因为我不使用它,所以我真的不能提供更多的细节。

于 2012-10-03T20:22:05.123 回答
0

我不熟悉 FrontPage 和 Notepad++ 以及您可能/必须在它们的上下文中使用的正则表达式引擎,所以我将把自己限制在一些一般性的评论中。

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

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

如果您的正则表达式引擎中的 {n,} 说明符有问题,您可以将 \s{2,} 替换为 \s\s+

此外,如果 < 和/或 > 是正则表达式引擎中的特殊(元)字符,则需要对它们进行分隔。(同样,我不熟悉 FrontPage 和 Notepad++ 环境。)

于 2012-10-03T23:12:47.867 回答
0

Frontpage 不允许在其代码编辑器中使用两个连续的空格——Frontpage 编辑器会自动&nbsp;将 html 代码中的第二个和任何连续的连续空格更改为 (ASCII Non-Breaking Space)。

在编辑过程中,或者即使它只是对站点重新计算或其他任务进行“内务管理”,它也会在不询问您的情况下执行此操作,并找到您可能使用其他编辑器添加的双倍空间。

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

此外,它会在编辑器中的一行末尾允许一个空格,然后在编辑器的下一行,它会允许另一个空格,并且它通常不会转换为&nbsp;- 但有时会根据编辑器的感知而有所不同需要转换那些。例如,它在转换多个空格时更具侵入性,即使在代码中以行分隔,如果它在 span 标签或 div 标签内,或者有时在表格单元格中(尤其是嵌套时)。

FrontPage 被构建为具有侵入性,并阻止您按照当时松散的 html 标准做它认为您不应该做的事情。(是的,它几乎没有达到那些微不足道的标准,并且标签和样式也很混乱,但它确实尝试过,而且它产生的内容通常在大多数浏览器上都是完全可见的,即使在今天也是如此。)

所以你会想找到:(空格)&nbsp;或它的相反顺序,并将它们全部替换&nbsp;为安全。

您可以在 FrontPage 自己的 Search/Replace 中执行此操作并检查 _IGNORE WHITE SPACE,以便它跨越 HTML 代码行中的中断并跨越代码中仅用于简化编码的选项卡。

如果你的 RegEx 很聪明,你可以创建一个捕获组,它可以找到这两种方法中的任何一种来表达一个空间,你将最小值设置为 2,最大值设置为你想要的最大值......比如 200。

如果您在“正常”PCRE RegEx 中执行此操作,则看起来像这样(匆忙输入,因此可能不完全正确,但您明白了):

([ \&nbsp\;]{2,200})

但是 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、...更多

请记住,如果您从 FrontPage 软件外部编辑 FrontPage 页面,您需要在完成后转到工具 >重新计算超链接并重新输入该软件。如果您没有更改任何链接,那么这样做并不是必需的——因为基本​​上执行该操作只是为每个更改的文件更新“影子”.htm(l) 文件——影子文件位于 /_vti_cfg/ 的子目录中文件所在的目录,它主要只是跟踪实际 .htm(l) 文件内的链接。然后收集该信息并将站点地图/链接地图/导航地图记录在网站的根目录的 /_vti_pvt/ 目录中,在该目录中,它会在文件中构建一个巨大的链接列表(双向),名称如下:linkinfo.btr还有 doctodep.btr 和 deptodoc.btr。

上面的 ^^^ 非常重要(重新计算链接),即使您认为在 FrontPage 之外使用文件时没有干扰任何超链接,原因如下:

即使您仅通过 FTP 发布,使用 -no- FP 服务器扩展,您仍然需要这些文件是最新的。当您通过 FTP 发布时,从技术上讲,FrontPage 将此视为使用 DTI(设计时包含)而不是服务器包含,因此它会预先合并您的页眉/页脚等,并调整许多位置相对关系的超链接,并且确实如此这一切都在放置页面之前。所以你仍然需要这些 /_vti_whatever/ 目录和它们在你的设计端(MS-Win PC)上的各种文件来处理任何 FrontPage 功能仍然可行,即使你的服务器上没有(危险的!)FPSE。

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

无论哪种方式,始终: 在您更改 FrontPage 客户端软件之外的任何文件后,工具 > 重新计算超链接。

最后一个是删除重复空格——在发布设置中有一个“删除重复空格”复选框,您可以在其中选择“优化已发布的 HTML”。确切的复选框可能在 FP2002 之后消失了,或者可能消除了作为不可更改默认值的“优化”选项内置的重复空间。您可以在您的版本上进行测试。

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

简介: 不要太在意在 FrontPage 中尝试这样做。从可以快速处理它的编辑器中执行此操作,然后运行您的重新计算。应该没问题,除了FP编辑器下半部分(WYSIWYG部分)的站点的视觉外观通常依赖于多个空间来显示布局,但是……嘿,2003年现在已经是15年前了。:-)

最好的给你。

于 2017-12-19T00:49:36.133 回答