问题标签 [regex-alternation]

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 投票
2 回答
318 浏览

javascript - 仅使用一个表达式匹配第一个匹配的更改版本?

我正在为 Alex Gorbatchev 的 Syntax Highlighter 编写画笔,以突出显示 Smalltalk 代码。现在,考虑以下 Smalltalk 代码:

我想找到块参数“:每个”,然后每次出现时都匹配“每个”(为简单起见,假设每次出现都不仅仅是在括号内)。请注意,参数可以有任何名称,例如“:myArg”。

我尝试匹配“:每个”:

这似乎有效。问题是我要匹配“每个”的出现。我认为这样的事情可以工作:

但是交替的右侧似乎被视为独立表达式,因此反向引用不起作用。

甚至有可能在一个表达式中完成我想要的吗?或者我是否必须在第二个表达式中使用反向引用(通过另一个函数调用)?

0 投票
2 回答
15108 浏览

java - Java 正则表达式交替运算符“|” 行为似乎坏了

尝试为罗马数字编写正则表达式匹配器。在 sed 中(我认为这被认为是正则表达式的“标准”?),如果您有多个由交替运算符分隔的选项,它将匹配最长的选项。即,"I|II|III|IV"将为“IV”匹配“IV”,为“III”匹配“III”

在 Java 中,相同的模式匹配“IV”的“I”和“III”的“I”。原来 Java 在从左到右的交替匹配之间进行选择;也就是说,因为“I”出现在正则表达式中的“III”之前,所以它匹配。如果我将正则表达式更改为"IV|III|II|I",则行为会得到纠正,但这显然不是一般的解决方案。

有没有办法让 Java 从交替组中选择最长的匹配项,而不是选择“第一个”?

为清晰起见的代码示例:

这输出"six"

0 投票
2 回答
206 浏览

php - 交替中的混乱

假设在一个正则表达式中,如果匹配一个替代项中的一个替代项,即使还有更多替代项(替代项之外的正则表达式中没有其他标记),它也会停在那里。

来源

这种搜索一个双字的模式(例如,this this

如果我介绍这个主题,我会感到困惑:

它与模式匹配。

\b([a-z]+) 匹配

((?:<[^>]+>|\s)+)跟随一个 TAG,因此是第二个替代匹配。

(\1\b) 如果跟随在第一个括号中反向引用的相同单词,则必须匹配。

如果标签后面不跟在“”后面,为什么要匹配(\1\b),跟在空格后面。

我知道轮换之内是存在的\s

但是不应该是TAG比赛消耗交替吗?

为什么\s替代品还活着?

0 投票
1 回答
130 浏览

regex - 如何将 grep 与正则表达式的交替部分一起使用?

我想 grep 八月或九月的所有日期(mm/dd/yyyy带有前导零的日期格式)。

我试过:

但命令提示符输出:

该系统找不到指定的路径。

0 投票
5 回答
87172 浏览

python - 使用交替运算符匹配多个正则表达式模式?

我在使用 Python Regex 时遇到了一个小问题。

假设这是输入:

我想要实现的是获得括号之间的任何内容作为单个匹配,以及外部的任何字符作为单个匹配。期望的结果将是:

应保持比赛的顺序。

我已经尝试使用 Python 3.3 获得它,但似乎无法找出正确的正则表达式。到目前为止,我有:

print(matches)产生以下结果:

任何想法我做错了什么?

0 投票
2 回答
2364 浏览

regex - 为什么字符类比交替更快?

似乎使用字符类比在示例中的交替更快:
[abc]vs(a|b|c)
我听说它被推荐,并通过一个简单的测试使用Time::HiRes我验证了它(慢了大约 10 倍)。
在捕获括号产生影响的情况下使用(?:a|b|c)也不会改变结果。
但我不明白为什么。我认为这是因为回溯,但我在每个位置看到它的方式有 3 个字符比较,所以我不确定回溯如何影响交替。这是实施的交替性质的结果吗?

0 投票
1 回答
56 浏览

c# - 具有不同格式的可选短语的正则表达式问题

我有一个文件,我想从中解析特定值。如何将以下所有三个正则表达式放在一起为每个测试返回一组条目,无论它是否有测量值以及它是否有错误,并且如果有的话,包括测量值和错误?一个测试中可以有任意数量的测试、任意数量的度量,但在没有其他度量的测试中只有一个错误。我尝试了许多不同的组合,但都没有成功。我想我需要使用前瞻和交替,但没有找到正确的组合。仅供参考,正则表达式存储在数据库中并由 C# 应用程序使用。提前致谢!

输入文件:

为了解析测试部分,我使用了正则表达式,它有效:

为了解析测量数据,我使用了正则表达式,它有效:

要解析错误,我使用正则表达式,它有效:

免责声明:是的,我知道输入是 XML,但我无法将应用程序更改为反序列化,它使用正则表达式。

0 投票
2 回答
2658 浏览

regex - 正则表达式交替顺序

我设置了一个复杂的正则表达式来从一页文本中提取数据。由于某种原因,交替的顺序不是我所期望的。一个简单的例子是:

简而言之,我试图获取一个楼层号,一个已知的命名楼层,作为备份,我捕获了 1-3 个未知单词,然后是楼层,以防以后复习(我实际上使用组名来识别这个但不想混淆这个问题)

问题是如果字符串是

我不13th Floor明白on the 13th Floor,这似乎表明它与第三个交替匹配。我原以为它会匹配 13 楼。我专门设置了这个(或者我是这么认为的)来优先考虑匹配的类型,只有在错过其他匹配时才将模糊的放在最后。我猜当他们说 Regex 是贪婪时他们不是在开玩笑,但我不清楚如何将其设置为“贪婪”并按照我想要的方式行事。

0 投票
3 回答
6860 浏览

regex - (a|b)* 和 a*|b* 一样吗?

(a|b)*一样的a*|b*吗?换句话说,是否接受由s 和s(a|b)*组合而成的字符串?ab

0 投票
3 回答
311 浏览

regex - 逻辑或在正则表达式中不起作用

我正在处理一个大日志文件,其条目如下:

我想提取上面示例中加粗的部分。这是我为上述内容编写的正则表达式

我想得到在第一次出现空格或问号之前GET或之后的部分。POST' ''?'

问题
正则表达式后面部分的逻辑 OR 不起作用。如果我只使用

我得到了正确的部分,即从 GET 或 POST 直到第一个问号'?'。同样,如果我使用

我得到了正确的部分,即从 GET 或 POST 到第一个空格' ')。

请问谁能告诉我哪里错了?