问题标签 [negative-lookbehind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1769 浏览

java - Java RegEx API“后视组在索引附近没有明显的最大长度......”

我正在使用一些 SQL where 子句解析并设计了一个工作正则表达式,以使用使用 .NET API 的“Rad Software Regular Expression Desginer”来查找字符串文字之外的列。为了确保设计的 RegEx 也适用于 Java,我当然使用 API(1.5 和 1.6)对其进行了测试。但你猜怎么着,这行不通。我收到了消息

“后视组在索引 28 附近没有明显的最大长度”。

我试图解析的字符串是

正如您可能已经猜到的那样,我试图创建某种最坏的情况以确保 RegEx 在更复杂的 SQL where 子句上不会失败。

RegEx 本身看起来像这样

我不确定是否有更优雅的 RegEx(很可能会有一个),但这并不重要,因为它可以解决问题。

用几句话来解释正则表达式:如果它找到了我所追求的列,它会进行否定的向后查找,以确定列名是否在字符串文字中使用。如果是这样,它将不匹配。如果不是,它将匹配。

回到问题。正如我之前提到的,它不适用于 Java。什么会起作用并产生我想要的结果?
我发现,Java 似乎不支持无限后视,但我仍然无法让它工作。
从搜索偏移量到当前搜索位置,后视总是对自身施加限制,这不是正确的吗?所以它会导致像“位置 - 偏移”这样的东西?

0 投票
3 回答
391 浏览

php - 需要可变宽度负后视替换

我在这里(以及更多网站)查看了许多问题,并提供了一些提示,但没有一个给我明确的答案。我知道正则表达式,但我远非大师。这个特定的问题涉及 PHP 中的正则表达式。

我需要在文本中找到未被给定类的超链接包围的单词。例如,我可能有

我需要匹配第二只和第三只大象而不是第一只(由测试类“no_check”标识)。请注意,超链接中的属性可能不仅仅是 href 和 class。我想出了

它在正则表达式测试软件中运行良好,但在 PHP 中却不行。

任何帮助是极大的赞赏。如果您不能提供正则表达式,但可以找到某种 PHP 代码逻辑来规避对它的需求,我将同样感激。

0 投票
3 回答
680 浏览

php - php中的负后视和贪婪量词

我正在使用正则表达式来查找任何 URL 并相应地链接它们。但是,我不想链接任何已经链接的 URL,所以我使用后向查看 URL 之前是否有 href。但是这失败了,因为在 PHP 的前瞻和后瞻中不允许使用可变长度量词。

这是比赛的正则表达式:

解决这个问题的最佳方法是什么?

编辑:

我还没有对其进行测试,但我认为在单个正则表达式中执行此操作的诀窍是在正则表达式中使用条件表达式,这由 PCRE 支持。它看起来像这样:

关键是如果href被抓到了,由于有条件的,会立即抛出匹配(?(1)^|),保证不匹配。它可能有什么问题。我明天测试一下。

0 投票
3 回答
1869 浏览

regex - 使正则表达式更高效

我试图通过寻找“!”,“?”来确定英语句子的结尾(仅近似)。或“.”,但在“.”的情况下 仅当前面没有常见缩写词(例如 Mr. 或 Dr.)时。

有什么方法可以使以下正则表达式更加高效?也许通过按大小递减,甚至按字母顺序对负面的lookbehinds进行排序?

这是我现在拥有的正则表达式:

问题:

http://regex.powertoy.org/上的网站报告说:“7 匹配 21044 探针(已完成)”,即使是一个简单的段落......数字 21044 的惊人大小似乎与负面回溯的数量密切相关。

我正在寻求降低 RegEx 引擎的计算复杂性,因为我有几 GB 的数据要通过它。

有什么办法可以解决这个问题吗?消极的后视真的是实现这一目标的最佳/唯一方法吗?有没有办法把它作为一个前瞻来代替?正则表达式是这个任务的错误工具吗?

编辑:我可以使用 ActionScript 或 PHP 的 RegEx 引擎。

编辑:我不能指望句子之间的空格数。 真的!?叹。

如果您不了解 RegEx 引擎的内部工作原理,请不要回答与优化有关的问题。

提前致谢。

0 投票
2 回答
360 浏览

php - 正则表达式:删除方案,除非它是 http(s)。(捕获负面的后视模式)

我在这里遇到了正则表达式中断。如何再次捕获负面的后视模式?

我正在尝试删除://uri 的方案(包括 ),除非它是 http/https。我到了一半(或者我以为我是,下面的模式甚至没有编译),但我忘记了如何实际捕获负面模式:

preg_replace( '~^(?<!https?)://~', '', $uri );

我该怎么做呢?

0 投票
5 回答
377 浏览

python - 你能解释一下为什么这个正则表达式不起作用吗?

为什么 group(0) 不匹配超人?这个环视教程说:

(?<!a)b 匹配前面没有“a”的“b”,使用否定的lookbehind

0 投票
2 回答
1004 浏览

python - 相当于 (.*) 在断言 Regex Python 后面的否定

我正在用 Python 编写一个否定的lookbehind 断言表达式,它执行以下函数来解析纯文本文件:

与 http:// * ** * ** * ** *之后的任何内容都不匹配 ;但当它不在 http:// *链接内时会匹配模式

所以我尝试了像这样的正则表达式

他们没有工作。

如何在 Python 中的断言正则表达式后面添加 .* 或在否定视图中执行类似的操作。

0 投票
3 回答
3968 浏览

php - 负后向正则表达式捕获的问题

我尝试匹配电子邮件地址,但前提是它们前面没有“mailto:”。我试试这个正则表达式:

"/(?<!mailto:)[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})/"

针对这个字符串: '<a href="mailto:someemail@domain.com">EMAIL</a> ... otheremail@domain.com '

我希望只抓到'otheremail@domain.com',但我也收到'omeemail@domain.com'- 看到失踪's'。我想知道这里有什么问题。在后向断言之后我不能有一个正常的正则表达式吗?

我在 PHP 中的整个示例如下所示:

谢谢!

0 投票
1 回答
212 浏览

python - 如何使用负面的回顾

基本上,我在给定样式表中将任何和所有具有蓝色色调的十六进制值更改为对应的红色色调(即#00f更改为#ff0000(我的函数输出六个字符的十六进制值,不包括#))。

创建正则表达式以匹配十六进制颜色不是问题(我不关心 HTML 颜色名称,尽管我最终可能关心rgb, rgba,hsb等值。)。这就是我最终的结果#(([0-9A-z]{3}){1,2})。它有效,但我希望它能够充分证明。例如,如果有人碰巧设置了#top带有有效十六进制值的片段(即)的背景图像,我不想更改它。我试着做一个负面的回顾,但它似乎不起作用。我正在使用\B#(([0-9A-z]{3}){1,2}),但如果在“#”之前有一个单词边界(例如空格),它与 URL 片段匹配。这是我认为应该做的伎俩,但没有:(?<!url\([^#)]*)#(([0-9A-z]{3}){1,2})

我正在使用RegExr的桌面版本来测试以下样式表:

每当我将鼠标悬停在(?<!子字符串上时,RegExr 都会将其标识为“匹配' '的负前瞻url\([^#)]*”。可能有错误还是我只是有一个糟糕的正则表达式日?在我们讨论的同时,是否还有其他上下文中将“#”用于非十六进制目的?

编辑:好吧,我不能一大早就编程。该十六进制正则表达式应该是#(([0-9A-Fa-f]{3}){1,2})

编辑 2:好的,所以我错过了大多数语言需要静态长度后视的细节。

0 投票
2 回答
438 浏览

regex - 正则表达式:负后视和否定之间的区别

来自正则表达式.info

\b\w+(?<!s)\b. 这绝对不一样\b\w+[^s]\b。当应用于 时Jon's,前者将匹配Jon后者Jon'(包括撇号)。我会留给你找出原因。(提示:\b 匹配撇号和 s)。后者也不会匹配像“a”或“I”这样的单字母词。

你能解释一下为什么吗?

另外,您能否说明一下究竟是做什么\b的,以及为什么它在撇号和 ? 之间匹配s