问题标签 [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 投票
4 回答
261 浏览

java - 正则表达式操作的优先级

我编写了一些java代码将字符串拆分为字符串数组。首先,我使用正则表达式模式分割该字符串"\\,\\,|\\,",然后使用模式分割"\\,|\\,\\,"。为什么第一个输出和第二个输出有区别?

使用时的输出regex1

使用时regex2

我需要一些解释正则表达式引擎在处理这种情况时是如何工作的。

0 投票
1 回答
319 浏览

ruby - 为什么不匹配交替中的更长令牌?

我使用的是 ruby​​ 2.1,但同样的东西可以在 rubular 网站上复制。

如果这是我的字符串:

我用这个表达式做一个正则表达式匹配:

我期望获得更长的令牌作为匹配项。

相反,我得到了第二个交替作为匹配。

据我所知,当不是中文字符时,它确实可以这样工作。

如果这是我的字符串:

我使用这个正则表达式:

返回的匹配结果是foobar。如果顺序是另一种方式,则匹配的字符串是foo. 这对我来说很有意义。

0 投票
1 回答
128 浏览

regex - 正则表达式替换可选替换

我想让将 Objective-C 翻译成 Swift 的生活变得更轻松;我目前正在编写一个程序,它将匹配某些常用的构造(例如方法、属性和变量)并将它们替换为 Swift 版本。现在我正在尝试将方法名称前面的 +/- 替换为classif+或 nothing if -

我似乎无法找到如何使交替(\+|-)被替换为class或者基于选择。这在纯正则表达式中可能吗?还是我需要把它放在我的应用程序逻辑中?

编辑:预期的输入和输出:

- (void)composeView(...)func composeView(...)

+ (void)composeView(...)class func composeView(...)

0 投票
3 回答
77 浏览

python - 为什么第一个交替不匹配?

我有以下我不理解的正则表达式(Python)。为什么它也与第一个交替不匹配?

正则表达式(间隔以便更好地理解):

测试字符串:

asdasd $asd:sd + ${asd123:asd} $HOME $$asd

搭配的东西:

asdasd $asd:sd + ${asd123:asd} $HOME $$asd

根据上面的正则表达式模式,也应该出现第一个交替,即:

看来我不太明白交替模式?

0 投票
3 回答
433 浏览

java - 有什么方法可以使用带有两对不同分隔符的正则表达式?

我已经在我的 Android 应用程序中添加了表情符号,并且我一直在使用 Java 中的 Regex,因此分配给它们的代码将匹配正则表达式(其中包含一对要使用的分隔符),使字符显示为图片。

例如,一些表情符号代码是sadhappysmile

到目前为止,它是这样的:

  • 分隔符:()

  • 正则表达式:\\(([.[^\\(\\)]]+)\\)

  • 匹配的表情符号代码示例:(sad), (happy), (smile).

我注意到,对于我添加的一些新表情符号,用户使用另一对分隔符(如字母z,. 那么,第二种情况是这样的:

  • 分隔符:z,

  • 正则表达式:z([.[^z\\,]]+)\\,

  • 匹配的表情符号代码示例:zsad,, zhappy,, zsmile,.

那么,我想要的是合并这两个正则表达式,因此用户可以使用两对分隔符中的任何一个输入表情符号代码,无论他或她喜欢哪个,它都会被匹配。例如,悲伤的表情符号将被匹配,并且每次写为(sad)or时它都会显示为图像zsad,,例如:

你好。(伤心)我有坏消息。扎德,

嘿…… (伤心)

好的。再见。扎德,

我尝试过使用交替运算符和环视,但没有成功。在以下两个正则表达式中,我只匹配了|交流发电机的左侧(当然,我希望左侧和右侧都匹配):

\\(([.[^\\(\\)]]+)\\)|z([.[^z\\,]]+)\\,

z([.[^z\\,]]+)\\,|\\(([.[^\\(\\)]]+)\\)

在以下正则表达式中,我根本没有匹配项:

(\\(([.[^\\(\\)]]+)\\)|z([.[^z\\,]]+)\\,),(\\(([.[^\\(\\)]]+)\\))|(z([.[^z\\,]]+)\\,)

(z([.[^z\\,]]+)\\,|\\(([.[^\\(\\)]]+)\\)),(z([.[^z\\,]]+)\\,)|(\\(([.[^\\(\\)]]+)\\))

\\(|z([.[^\\(\\z\\,)]]+)\\)|\\,,(\\(|z)([.[^\\(\\z\\,)]]+)(\\)|\\,) (\\()|(z)([.[^\\(\\z\\,)]]+)(\\))|(\\,)

(?=\\(([.[^\\(\\)]]+)\\))(?=z([.[^z\\,]]+)\\,),(?=.*\\(([.[^\\(\\)]]+)\\))(?=.*z([.[^z\\,]]+)\\,)

对不起,我只想提供尽可能多的细节。有谁知道我在做什么或写错了,我可以使用什么正则表达式来匹配 zemojicode, and (emojicode)您的帮助将不胜感激。

0 投票
2 回答
111 浏览

regex - 在正则表达式中使用交替时 Perl 未初始化的值

我有一个带有 if 语句的 for 循环,如下所示:

我收到一条错误消息,在 if 语句的行上显示“在模式匹配中使用 @array 中未初始化的值......”。

当我从该行的正则表达式中删除交替时,错误就消失了。如果我注释掉整个 if 语句,则注释“#Get rid of numbers at the end”下的正则表达式不会产生任何错误。

我已经打印出@array 的所有值,一切看起来都很好。我试过没有括号和括号,而不是表达式中的括号,没有任何变化。有什么想法可能导致这种情况吗?

0 投票
1 回答
1269 浏览

javascript - 要么|要么是正则表达式的一部分,用于匹配两种可能性

我们有两种引用同一系统的方式:

  • tr12345
  • fr12345

现在我每个变体都有一个正则表达式,例如

  1. /(?:^|^\s|[^\/a-zA-Z0-9])tr([0-9]+).*$/img
  2. /(?:^|^\s|[^\/a-zA-Z0-9])fr([0-9]+).*$/img

这很好用,但我认为将两者结合起来会更有效。我从其他文章中看到,您可以使用交替|来匹配变体。如果我要同时匹配两者,是否需要在“tr”之后重复正则表达式?例如,这样的事情可能吗?

示例输入 1:

tr12345

期望的输出1:

12345

示例输入 2:

fr123456

期望的输出2:

123456

我一直在这里玩它: https ://regex101.com/r/FUCmv0/2

0 投票
2 回答
231 浏览

python - Python 正则表达式:对带有分隔符的单词集使用交替

我想匹配一个字符串元素应该只包含特定字符的字符串:

  • [A,C,K,M,F] 中的第一个字符
  • 后跟一个数字(浮点数或整数)。允许的实例:1、2.5、3.6、9、0、6.3 等。
  • 以任一罗马数字结尾 [I, II, III, IV, V]。

我提供的正则表达式如下

bool(re.match(r'(A|C|K|M|F){1}\d+\.?\d?(I|II|III|IV|V)$', test_str))

"(I|II|III|IV|V)"部分将返回真,test_str='C5.3IV'但我想让它成为真,即使两个罗马数字同时存在并带有分隔符,/即正则表达式查询也应该返回真test_str='C5.3IV/V'

我应该如何修改正则表达式?

谢谢

0 投票
2 回答
368 浏览

string - 查找匹配正则表达式的最大输入字符串

给定一个正则表达式 re 和一个输入字符串 str,我想找到 str 的最大子字符串,它从匹配 re 的最小位置开始。

特例:

将 re 与 str 匹配应该返回匹配的字符串"abcbc"(而不是"a"像 PCRE 那样)。我还记得,如果交替的顺序发生变化,结果就是我想要的。

0 投票
1 回答
418 浏览

mysql - 具有匹配整个字符串的两个备选方案的备选组

我正在研究一个正则表达式,它仅在给定值为 A 或 B 的情况下返回 1。

我用了

'|' 符号的行为类似于“或”,但结果与 AB 不同:

虽然我预计这里没有比赛。