Regex 特定对或对中每个项的正则表达式

Regex 特定对或对中每个项的正则表达式,regex,actionscript-3,Regex,Actionscript 3,我有一种情况,我可能会得到一对字符中的一个或两个,我想匹配其中一个 例如: str = 'cddd a dfsdf b sdfg ab uyeroi' 我想匹配任何“a”或“b”或“ab”。如果“ab”组合在一起,我希望将其作为单个匹配(而不是两个匹配“a”“b”)。如果我得到“ab”,它将始终按照该顺序(“a”将始终位于“b”之前) 我得到的是: /[ab]|ab/ 但是我不确定ab是否比[ab]更适合匹配 感谢您的帮助。您当前的表达式在大多数流行的正则表达式引擎中无法满足您的要求-它将匹

我有一种情况,我可能会得到一对字符中的一个或两个,我想匹配其中一个

例如:

str = 'cddd a dfsdf b sdfg ab uyeroi'
我想匹配任何“a”或“b”或“ab”。如果“ab”组合在一起,我希望将其作为单个匹配(而不是两个匹配“a”“b”)。如果我得到“ab”,它将始终按照该顺序(“a”将始终位于“b”之前)

我得到的是:

/[ab]|ab/
但是我不确定
ab
是否比
[ab]
更适合匹配


感谢您的帮助。

您当前的表达式在大多数流行的正则表达式引擎中无法满足您的要求-它将匹配
a
b
。行为取决于以下因素:

您可以很容易地找到您想要使用的正则表达式风格是具有文本导向引擎还是正则表达式导向引擎。如果反向引用和/或惰性量词可用,则可以确定引擎是正则表达式定向的。您可以通过将regex
regex | regex not
应用于字符串
regex not
来进行测试。如果结果匹配仅为
regex
,则引擎为regex定向的。如果结果是
regex not
,则它是文本定向的。这背后的原因是由regex引导的引擎是“急切的”

如果您使用的是正则表达式导向的引擎,那么要修复它,您可以颠倒替换中术语的顺序,以确保它首先尝试匹配
ab

/ab|[ab]/
或者您可以重写表达式,这样顺序就不重要了:

/ab?|b/
这项工作:

((ab)|a|b)
或者更好

(ab|[ab])

你可以将a、b和ab的实例作为单词。你是否只需要找到完整的单词?如果是这样,你应该试试


/\bab\b |\b[ab]\b/

我已经在我的帖子之后交换了表达式(明显的错误)。如果可能有多个or'ed语句需要匹配,那么在regexp中匹配总是从左到右尝试,这是真的吗?我也喜欢第二种方法。@James Fassett:这可能取决于您使用的特定正则表达式引擎,但我见过的所有正则表达式引擎都是从左到右交替匹配的。这里有一些关于这种行为的讨论:(参见关于渴望的部分)。@James Fassett:我也在我的答案中添加了更多信息-有些正则表达式引擎不使用从左到右的匹配。我将使用我正在使用的引擎进行一些测试。无论哪种方式,我都可能选择第二种方式。我不需要在边界上进行匹配。我只是想让例子中的人物脱颖而出。谢谢。你使用哪种语言/正则表达式引擎?语言是ActionScript 3,我的目标是Flash Player 10。我不确定它将使用哪种类型的发动机(我希望这不重要)。有时不重要,有时重要。它总是值得详细说明,因此可以给出准确的答案。