问题标签 [lookaround]

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 回答
6870 浏览

c# - 这个正则表达式替换如何反转字符串?

这是一系列教育正则表达式文章的第四部分。它展示了嵌套引用的组合(参见:这个正则表达式如何找到三角数?)到断言中的“计数”(参见:我们如何将 a^nb^n 与 Java 正则表达式匹配?)可用于反转字符串. 以编程方式生成的模式使用元模式抽象(请参阅:此 Java 正则表达式如何检测回文?)。在该系列中,这些技术首次用于替换而不是整个字符串匹配。

提供了完整的工作 Java 和 C# 实现。包括励志名言。

使用正则表达式反转字符串似乎从来都不是一个好主意,如果它完全可能的话,甚至不是立即显而易见的,如果是的话,人们可能会如何尝试这样做。

虽然这仍然不是一个好主意,但至少现在我们知道这是可能的,因为这是一种方法:

C# 也在 ideone.com 上

Java 也在 ideone.com 上

C# 和 Java 版本似乎都使用相同的整体算法,仅在抽象的实现细节上略有不同。

显然,这不是反转字符串的最佳、最直接、最有效的方法。也就是说,为了了解正则表达式;如何概念化模式;引擎如何工作以匹配它们;如何将各个部分组合在一起以构建我们想要的东西;如何以可读和可维护的方式这样做;只是为了学习新事物的纯粹乐趣,我们能解释一下它是如何工作的吗?


附录:备忘单!

这是对使用的基本正则表达式结构的简要描述:

  • (?sx)是嵌入的标志修饰符s启用“单行”模式,允许匹配任何字符(包括换行符)。x启用自由间距模式,其中未转义的空格被忽略(#并可用于注释)。
  • ^并且$是行首和行尾的锚点
  • ?作为重复说明符表示可选(即零或一)。例如,作为重复量词,.*?它表示*(即零次或多次)重复是不情愿的/非贪婪的。
  • (…)用于分组(?:…)是非捕获组。一个捕获组保存它匹配的字符串;它允许后退/前进/嵌套引用(例如\1)、替换替换(例如$2)等。
  • (?=…)是积极的前瞻;它看起来向右断言给定模式的匹配。(?<=…)是积极的回顾;它看起来向左。

语言参考/其他资源

0 投票
1 回答
394 浏览

c# - C# 正则表达式中环视的效率。如果可以,我应该避免它们吗?

每个人!我对正则表达式很陌生,但我喜欢它们,很多!

如果你愿意,可以叫我挑剔,但我真的很想知道如果我有选择的话,我是否应该避免使用前瞻和后瞻。

例如,下面的两个命令做同样的事情,一个使用lookbehind,另一个不使用。

你会用哪一个?哪个更有效率?

感谢您的回答!

0 投票
2 回答
1951 浏览

regex - 正则表达式:匹配不匹配子正则表达式的行

假设我有一个正则表达式foobar并且我想查找文档中不包含与foobar匹配的所有行。我可以这样做吗?我该怎么做呢?

0 投票
3 回答
3675 浏览

regex - RegEx - 与条件环视匹配?

我想使用环视来匹配字符串的一部分,但前提是该行中不包含其他单词。

一些熊在树林里生活和进食。

在上面的行中,我想找到“eat in the”(在“live and”和“woods”之间):

但前提是“bears”不在该行之外,无论是在环视之后、之前还是之间。

其他不应返回匹配的行示例是:

有些动物在树林里生活和吃东西,比如熊。

有些动物在树林里生活和吃熊。

如何将此条件添加到我的正则表达式中?

0 投票
1 回答
147 浏览

regex - 环顾正则表达式来评估双方?

好的,我有一个非常棘手的正则表达式问题。

我需要用空格匹配并替换以下字符串中的 + 符号,因此左侧的字符串必须成为右侧的字符串。

我已经设法用这个来确定大部分时间,它会检查加号前后的字符串:

但是,我一次只能在 (2) 中确定一组相邻的加号:

在我当前的正则表达式困惑状态下,我想知道是否需要将模式包装在更大的条件下,或者是否需要在环视中实现一个或模式。那里有任何正则表达式专家愿意试一试吗?

0 投票
1 回答
232 浏览

.net - 在正则表达式匹配中使用环视或忽略非捕获

考虑以下字符串:ABC. 我想使用正则表达式捕获以下组:

必须使用单个正则表达式来捕获这两个组。我无法控制代码,因此子匹配或捕获组无济于事。

我已经尝试了两个非捕获组并环顾四周。

对于非捕获组,比赛仍然是最终结果的一部分。

Group1: ABC # 不正确,因为 B 是比赛的一部分。组2:B

通过环顾,Group2 不会被使用,并且在前瞻之后的正则表达式应该再次匹配 Group2 的内容,将其作为 Group1 的一部分。

Group1: ABC # 不正确,因为 B 是比赛的一部分。组2:B

如何在 Group1 比赛中忽略“B”?

非常感谢任何有关解决此问题的帮助。

谢谢, 巴拉吉

0 投票
1 回答
1998 浏览

php - PHP 正则表达式不是以.. 开头的负向后看不起作用?

我正在尝试提取名称服务器。的格式$output是这样的,ns1.nameserver.com例如它包含。

它还可能包含www.apple.com.
这当然不是名称服务器。

我试图不包括任何结果,因此包含www.
我的尝试如下:

0 投票
4 回答
1939 浏览

regex - 使用 RegEx(正则表达式)在特定单词之后选择单词

简而言之,我正在尝试匹配特定单词之后的单词。

所以我有一个字符串

现在我想选择"Age="之后的所有内容,但不包括"Age="

所以简而言之,我只想选择"55"。每行末尾都有新的行字符。现在我已经查看了 Lookaround
(?!(Age)).*\r

这是行不通的。

在这里接受建议。

0 投票
1 回答
815 浏览

regex - Oracle SQL 中的前瞻正则表达式 - 在下划线后去除零

我使用以下正则表达式来去除下划线后的所有零:((?<=_)0+在 Java 中)或/(?<=_)0+/(在 php 中)。

例如Serial_Number_000000222->Serial_Number_222

这种“lookaroud”语法似乎在Oracle中不起作用。任何人都可以提出替代方案吗?

非常感谢

0 投票
1 回答
136 浏览

.net - 可以在正则表达式的一个位置匹配但不能在另一个位置匹配(例如位置异或)?

我希望在一个更大的正则表达式中创建几个子表达式,其中每个子表达式匹配输入中一个位置或另一个位置的某些内容,但不是在两个位置,最好每个“感兴趣区域”使用相同的命名组。例如,我想匹配下面斜体的体积单位和粗体显示的货币单位。

  • 3.23美元/加仑
  • 3.23美元(加仑)
  • 4.50加元/加仑
  • 1加仑@ 3.23美元
  • 10加仑。@ 4.50加元

或更一般地说:

  • 东西更多的东西XXX更多的东西
  • 东西XXX更多东西

其中stuffmorestuff可能是一组复杂的子表达式。

似乎有可能使用一些组合

  • 组堆栈推送/弹出
  • 平衡组
  • 看看周围

但我不确定如何进行。它是否归结为交替(|)或具有不同表达的多次传递(我认为这相当于同一件事)?