Regex 正则表达式:“ux/ui”字符串的智能正则表达式

Regex 正则表达式:“ux/ui”字符串的智能正则表达式,regex,Regex,我是正则表达式中的一个noob,正在尝试为上面的字符串生成正则表达式,该字符串也可以显示为ui/ux或ui-ux或ux-ui (u)(x|i)\/?\1\2 但这是行不通的。我的问题是如何为捕获组使用反向引用?我不确定捕获组是否是这种模式的有效方法。我认为,只需列举ux和ui的两种可能顺序,就可以得到一个可读性更高、更准确的表达式: (ux[\/ ]ui|ui[\/ ]ux) 在regex101上,我不确定捕获组是否是解决此模式的有效方法。我认为,只需列举ux和ui的两种可能顺序,就可以得

我是正则表达式中的一个noob,正在尝试为上面的字符串生成正则表达式,该字符串也可以显示为ui/ux或ui-ux或ux-ui

(u)(x|i)\/?\1\2 

但这是行不通的。我的问题是如何为捕获组使用反向引用?

我不确定捕获组是否是这种模式的有效方法。我认为,只需列举ux和ui的两种可能顺序,就可以得到一个可读性更高、更准确的表达式:

(ux[\/ ]ui|ui[\/ ]ux)

在regex101上,我不确定捕获组是否是解决此模式的有效方法。我认为,只需列举ux和ui的两种可能顺序,就可以得到一个可读性更高、更准确的表达式:

(ux[\/ ]ui|ui[\/ ]ux)

在regex101上,如果您真的想使用back引用,那么可以使用以下方法:

这意味着最后一个字符应该是x或i,但不是第二组中捕获的字符,也就是x或i

请注意,反向引用是指匹配的内容,而不是模式

可供替代的 这里有一个替代方案,旨在避免[xi]的重复,但它有一些缺点:

它还将匹配该对后面的分隔符 分隔符是可选的,因此它也将匹配UXII。 它不会为配对的第一部分返回单独的捕获,因此您必须分析完整的匹配以提取您以后需要的内容。
如果您真的想继续使用后面的引用,那么您可以使用以下方法:

这意味着最后一个字符应该是x或i,但不是第二组中捕获的字符,也就是x或i

请注意,反向引用是指匹配的内容,而不是模式

可供替代的 这里有一个替代方案,旨在避免[xi]的重复,但它有一些缺点:

它还将匹配该对后面的分隔符 分隔符是可选的,因此它也将匹配UXII。 它不会为配对的第一部分返回单独的捕获,因此您必须分析完整的匹配以提取您以后需要的内容。
谢谢,但只是为了好玩,我们能避免重复字符并创建一个真正智能的正则表达式吗?好吧,一开始,你就可以计算出初始u以获得ux[\]ui;i[\]ux,但你可以看到你已经失去了一点可读性。但我同意,这是一个有趣的正则表达式拼图;如果我有更聪明的想法,我会发表一篇编辑文章@BoCode什么是真正聪明的正则表达式?一个在复杂程度上令人惊讶的人,还是一个以快速和明显的方式完成工作的人?就可维护性、可移植性和最可能的速度而言,这比trincot给出的答案要好。@wilusdaman仅供参考。一般来说,正则表达式中没有必要避开正斜杠,这只在正则表达式中是必需的。许多语言用字符串文字定义正则表达式,其中正斜杠转义是多余的,但引号转义是必要的,原因也是一样的。@tomalak我想要避免字符重复的东西,整个正则表达式必须很小,并作为帮助我学习的灵感。特林科特非常接近。。我想上面的表达式可能会有更小的版本。谢谢,但只是为了好玩,我们能避免字符的重复并创建一个真正智能的正则表达式吗?好吧,马上,你可以计算出初始的u来得到ux[\]ui;i[\]ux,但你可以看到你已经失去了一点可读性。但我同意,这是一个有趣的正则表达式拼图;如果我有更聪明的想法,我会发表一篇编辑文章@BoCode什么是真正聪明的正则表达式?一个在复杂程度上令人惊讶的人,还是一个以快速和明显的方式完成工作的人?就可维护性、可移植性和最可能的速度而言,这比trincot给出的答案要好。@wilusdaman仅供参考。一般来说,正则表达式中没有必要避开正斜杠,这只在正则表达式中是必需的。许多语言用字符串文字定义正则表达式,其中正斜杠转义是多余的,但引号转义是必要的,原因也是一样的。@tomalak我想要避免字符重复的东西,整个正则表达式必须很小,并作为帮助我学习的灵感。特林科特非常接近。。我猜上面的表达式可能会有更小的版本。谢谢。也许我太天真了,但有没有办法消除上面表达式中重复[xi]的冗余?没有,但在您使用的编程环境中,您当然可以通过动态构造正则表达式来处理。然后部分[xi]将位于某个字符串变量中,您可以在构建正则表达式时重复该部分。尽管如此,我添加了一个避免重复的替代方案,但它有一些缺点。谢谢。也许我太天真了,但有没有办法消除上述表达式中[xi]重复的冗余?没有,但是在您使用的编程环境中,您当然可以通过构造正则表达式来处理这个问题
n动态地。然后,部分[xi]将位于某个字符串变量中,您可以在构建正则表达式时重复该变量。