问题标签 [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.
c# - 这个正则表达式替换如何反转字符串?
这是一系列教育正则表达式文章的第四部分。它展示了嵌套引用的组合(参见:这个正则表达式如何找到三角数?)到断言中的“计数”(参见:我们如何将 a^nb^n 与 Java 正则表达式匹配?)可用于反转字符串. 以编程方式生成的模式使用元模式抽象(请参阅:此 Java 正则表达式如何检测回文?)。在该系列中,这些技术首次用于替换而不是整个字符串匹配。
提供了完整的工作 Java 和 C# 实现。包括励志名言。
使用正则表达式反转字符串似乎从来都不是一个好主意,如果它完全可能的话,甚至不是立即显而易见的,如果是的话,人们可能会如何尝试这样做。
虽然这仍然不是一个好主意,但至少现在我们知道这是可能的,因为这是一种方法:
C# (也在 ideone.com 上)
Java (也在 ideone.com 上)
C# 和 Java 版本似乎都使用相同的整体算法,仅在抽象的实现细节上略有不同。
显然,这不是反转字符串的最佳、最直接、最有效的方法。也就是说,为了了解正则表达式;如何概念化模式;引擎如何工作以匹配它们;如何将各个部分组合在一起以构建我们想要的东西;如何以可读和可维护的方式这样做;只是为了学习新事物的纯粹乐趣,我们能解释一下它是如何工作的吗?
附录:备忘单!
这是对使用的基本正则表达式结构的简要描述:
(?sx)
是嵌入的标志修饰符。s
启用“单行”模式,允许点匹配任何字符(包括换行符)。x
启用自由间距模式,其中未转义的空格被忽略(#
并可用于注释)。^
并且$
是行首和行尾的锚点。?
作为重复说明符表示可选(即零或一)。例如,作为重复量词,.*?
它表示*
(即零次或多次)重复是不情愿的/非贪婪的。(…)
用于分组。(?:…)
是非捕获组。一个捕获组保存它匹配的字符串;它允许后退/前进/嵌套引用(例如\1
)、替换替换(例如$2
)等。(?=…)
是积极的前瞻;它看起来向右断言给定模式的匹配。(?<=…)
是积极的回顾;它看起来向左。
语言参考/其他资源
c# - C# 正则表达式中环视的效率。如果可以,我应该避免它们吗?
每个人!我对正则表达式很陌生,但我喜欢它们,很多!
如果你愿意,可以叫我挑剔,但我真的很想知道如果我有选择的话,我是否应该避免使用前瞻和后瞻。
例如,下面的两个命令做同样的事情,一个使用lookbehind,另一个不使用。
你会用哪一个?哪个更有效率?
感谢您的回答!
regex - 正则表达式:匹配不匹配子正则表达式的行
假设我有一个正则表达式foobar并且我想查找文档中不包含与foobar匹配的所有行。我可以这样做吗?我该怎么做呢?
regex - RegEx - 与条件环视匹配?
我想使用环视来匹配字符串的一部分,但前提是该行中不包含其他单词。
一些熊在树林里生活和进食。
在上面的行中,我想找到“eat in the”(在“live and”和“woods”之间):
但前提是“bears”不在该行之外,无论是在环视之后、之前还是之间。
其他不应返回匹配的行示例是:
有些动物在树林里生活和吃东西,比如熊。
有些动物在树林里生活和吃熊。
如何将此条件添加到我的正则表达式中?
regex - 环顾正则表达式来评估双方?
好的,我有一个非常棘手的正则表达式问题。
我需要用空格匹配并替换以下字符串中的 + 符号,因此左侧的字符串必须成为右侧的字符串。
我已经设法用这个来确定大部分时间,它会检查加号前后的字符串:
但是,我一次只能在 (2) 中确定一组相邻的加号:
在我当前的正则表达式困惑状态下,我想知道是否需要将模式包装在更大的条件下,或者是否需要在环视中实现一个或模式。那里有任何正则表达式专家愿意试一试吗?
.net - 在正则表达式匹配中使用环视或忽略非捕获
考虑以下字符串:ABC
. 我想使用正则表达式捕获以下组:
必须使用单个正则表达式来捕获这两个组。我无法控制代码,因此子匹配或捕获组无济于事。
我已经尝试了两个非捕获组并环顾四周。
对于非捕获组,比赛仍然是最终结果的一部分。
Group1: ABC # 不正确,因为 B 是比赛的一部分。组2:B
通过环顾,Group2 不会被使用,并且在前瞻之后的正则表达式应该再次匹配 Group2 的内容,将其作为 Group1 的一部分。
Group1: ABC # 不正确,因为 B 是比赛的一部分。组2:B
如何在 Group1 比赛中忽略“B”?
非常感谢任何有关解决此问题的帮助。
谢谢, 巴拉吉
php - PHP 正则表达式不是以.. 开头的负向后看不起作用?
我正在尝试提取名称服务器。的格式$output
是这样的,ns1.nameserver.com
例如它包含。
它还可能包含www.apple.com
.
这当然不是名称服务器。
我试图不包括任何结果,因此包含www.
我的尝试如下:
regex - 使用 RegEx(正则表达式)在特定单词之后选择单词
简而言之,我正在尝试匹配特定单词之后的单词。
所以我有一个字符串
现在我想选择"Age="之后的所有内容,但不包括"Age="。
所以简而言之,我只想选择"55"。每行末尾都有新的行字符。现在我已经查看了 Lookaround
(?!(Age)).*\r
这是行不通的。
在这里接受建议。
regex - Oracle SQL 中的前瞻正则表达式 - 在下划线后去除零
我使用以下正则表达式来去除下划线后的所有零:((?<=_)0+
在 Java 中)或/(?<=_)0+/
(在 php 中)。
例如Serial_Number_000000222
->Serial_Number_222
这种“lookaroud”语法似乎在Oracle中不起作用。任何人都可以提出替代方案吗?
非常感谢
.net - 可以在正则表达式的一个位置匹配但不能在另一个位置匹配(例如位置异或)?
我希望在一个更大的正则表达式中创建几个子表达式,其中每个子表达式匹配输入中一个位置或另一个位置的某些内容,但不是在两个位置,最好每个“感兴趣区域”使用相同的命名组。例如,我想匹配下面斜体的体积单位和粗体显示的货币单位。
- 3.23美元/加仑。
- 3.23美元(加仑)
- 4.50加元/加仑
- 1加仑@ 3.23美元
- 10加仑。@ 4.50加元
或更一般地说:
- 东西更多的东西XXX更多的东西
- 东西XXX更多东西
其中stuff和morestuff可能是一组复杂的子表达式。
似乎有可能使用一些组合
- 组堆栈推送/弹出
- 平衡组
- 看看周围
但我不确定如何进行。它是否归结为交替(|
)或具有不同表达的多次传递(我认为这相当于同一件事)?