如何将 GREP 向后查找限制为不以某些字符开头的字符串

问题描述 投票:0回答:1

在 InDesign 中,我使用 GREP 表达式

(?<=.)/(?=.)
来查找整个文档中出现的所有字符 / 。我想将此限制为所有不以 http 或 www 开头的单词/字符串。

我已经设法找到所有以 http 或 www 开头且带有

\<www|\<http
的单词/字符串,但是,我无法将两者结合起来。我已经尝试过
(?<=.)(?<!\<www|\<http)/(?=.)
但没有成功。

regex grep regex-lookarounds adobe-indesign
1个回答
0
投票

按照规定,您的尝试将确保/

之前的文本
不是
www
http
。我们看不到您的测试数据,所以您到底需要什么并不完全清楚;但可能是这样的

\b(?!(?:http|www))\w+/(?=\w+)

单词边界

\b
将表达式锚定到“单词”的开头(这到底意味着什么取决于您的正则表达式引擎,也许还取决于您的区域设置;通常是字母、数字,也许还有 @ 和下划线),这就是我们的位置锚定消极的前瞻。我们要求其后跟任意数量的“单词”字符、斜杠和更多“单词”字符。

例如,在 URL 中,这将匹配 URL 路径中的组件(例如

com
more
以及
stuff
中的
http://example.com/more/stuff
);如果这不是您真正想要的,也许可以编辑您的问题以更详细地阐明您到底需要什么。

演示:https://regex101.com/r/7Y9TYY/1

如果您只想提取斜杠(尽管我认为这有点奇怪?),您可以在它周围添加捕获括号。

如果您的正则表达式引擎允许,您可以将从

\b
到斜杠之前的所有内容放在向后查找中;然而,许多引擎不允许可变宽度负环视。

© www.soinside.com 2019 - 2024. All rights reserved.