问题标签 [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.
javascript - 仅使用一个表达式匹配第一个匹配的更改版本?
我正在为 Alex Gorbatchev 的 Syntax Highlighter 编写画笔,以突出显示 Smalltalk 代码。现在,考虑以下 Smalltalk 代码:
我想找到块参数“:每个”,然后每次出现时都匹配“每个”(为简单起见,假设每次出现都不仅仅是在括号内)。请注意,参数可以有任何名称,例如“:myArg”。
我尝试匹配“:每个”:
这似乎有效。问题是我要匹配“每个”的出现。我认为这样的事情可以工作:
但是交替的右侧似乎被视为独立表达式,因此反向引用不起作用。
甚至有可能在一个表达式中完成我想要的吗?或者我是否必须在第二个表达式中使用反向引用(通过另一个函数调用)?
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"
php - 交替中的混乱
假设在一个正则表达式中,如果匹配一个替代项中的一个替代项,即使还有更多替代项(替代项之外的正则表达式中没有其他标记),它也会停在那里。
这种搜索一个双字的模式(例如,this this
)
如果我介绍这个主题,我会感到困惑:
它与模式匹配。
\b([a-z]+)
匹配
((?:<[^>]+>|\s)+)
跟随一个 TAG,因此是第二个替代匹配。
(\1\b)
如果跟随在第一个括号中反向引用的相同单词,则必须匹配。
如果标签后面不跟在“”后面,为什么要匹配(\1\b)
,跟在空格后面。
我知道轮换之内是存在的\s
。
但是不应该是TAG比赛消耗交替吗?
为什么\s
替代品还活着?
regex - 如何将 grep 与正则表达式的交替部分一起使用?
我想 grep 八月或九月的所有日期(mm/dd/yyyy
带有前导零的日期格式)。
我试过:
但命令提示符输出:
该系统找不到指定的路径。
python - 使用交替运算符匹配多个正则表达式模式?
我在使用 Python Regex 时遇到了一个小问题。
假设这是输入:
我想要实现的是获得括号之间的任何内容作为单个匹配,以及外部的任何字符作为单个匹配。期望的结果将是:
应保持比赛的顺序。
我已经尝试使用 Python 3.3 获得它,但似乎无法找出正确的正则表达式。到目前为止,我有:
print(matches)
产生以下结果:
任何想法我做错了什么?
regex - 为什么字符类比交替更快?
似乎使用字符类比在示例中的交替更快:
[abc]
vs(a|b|c)
我听说它被推荐,并通过一个简单的测试使用Time::HiRes
我验证了它(慢了大约 10 倍)。
在捕获括号产生影响的情况下使用(?:a|b|c)
也不会改变结果。
但我不明白为什么。我认为这是因为回溯,但我在每个位置看到它的方式有 3 个字符比较,所以我不确定回溯如何影响交替。这是实施的交替性质的结果吗?
c# - 具有不同格式的可选短语的正则表达式问题
我有一个文件,我想从中解析特定值。如何将以下所有三个正则表达式放在一起为每个测试返回一组条目,无论它是否有测量值以及它是否有错误,并且如果有的话,包括测量值和错误?一个测试中可以有任意数量的测试、任意数量的度量,但在没有其他度量的测试中只有一个错误。我尝试了许多不同的组合,但都没有成功。我想我需要使用前瞻和交替,但没有找到正确的组合。仅供参考,正则表达式存储在数据库中并由 C# 应用程序使用。提前致谢!
输入文件:
为了解析测试部分,我使用了正则表达式,它有效:
为了解析测量数据,我使用了正则表达式,它有效:
要解析错误,我使用正则表达式,它有效:
免责声明:是的,我知道输入是 XML,但我无法将应用程序更改为反序列化,它使用正则表达式。
regex - 正则表达式交替顺序
我设置了一个复杂的正则表达式来从一页文本中提取数据。由于某种原因,交替的顺序不是我所期望的。一个简单的例子是:
简而言之,我试图获取一个楼层号,一个已知的命名楼层,作为备份,我捕获了 1-3 个未知单词,然后是楼层,以防以后复习(我实际上使用组名来识别这个但不想混淆这个问题)
问题是如果字符串是
我不13th Floor
明白on the 13th Floor
,这似乎表明它与第三个交替匹配。我原以为它会匹配 13 楼。我专门设置了这个(或者我是这么认为的)来优先考虑匹配的类型,只有在错过其他匹配时才将模糊的放在最后。我猜当他们说 Regex 是贪婪时他们不是在开玩笑,但我不清楚如何将其设置为“贪婪”并按照我想要的方式行事。
regex - (a|b)* 和 a*|b* 一样吗?
是(a|b)*
一样的a*|b*
吗?换句话说,是否接受由s 和s(a|b)*
组合而成的字符串?a
b
regex - 逻辑或在正则表达式中不起作用
我正在处理一个大日志文件,其条目如下:
我想提取上面示例中加粗的部分。这是我为上述内容编写的正则表达式
我想得到在第一次出现空格或问号之前GET
或之后的部分。POST
' '
'?'
问题
正则表达式后面部分的逻辑 OR 不起作用。如果我只使用
我得到了正确的部分,即从 GET 或 POST 直到第一个问号'?'
。同样,如果我使用
我得到了正确的部分,即从 GET 或 POST 到第一个空格' '
)。
请问谁能告诉我哪里错了?