正则表达式匹配模式 x 但返回任意字符串 y
Posted
技术标签:
【中文标题】正则表达式匹配模式 x 但返回任意字符串 y【英文标题】:Regex match pattern x but return an arbitrary string y instead 【发布时间】:2018-03-26 22:01:18 【问题描述】:是否可以匹配某个模式但返回不同的任意字符串(不一定包含在测试字符串中)?我希望正则表达式返回任意字符串。
嵌入的 Perl 代码可以,或者只是用周围的编程语言处理返回的部分。但我很想知道是否可以只使用正则表达式。让我将其表述为(错误的)if 语句模式。
(?(?=test)"true"|"false")
我没有想到特定的正则表达式方言,但如果能够使用 C#、php、Perl、javascript 或 Python 等通用语言来实现这一点,那就太好了。所以,请不要使用专用软件。
我对正则表达式的理解告诉我,你不能返回不存在的东西(正如 Jan 恢复的那样),严格来说,正则表达式模式只返回一个真/假结果,说明它是否匹配(正如 Borodin 指出的那样)。但还是这样。
【问题讨论】:
你的意图不是很清楚。你的意思是像this这样的东西吗? 我想到了命名组。但我希望它在(匹配)结果中包含任意字符串。我不想取得任何成就。我只是好奇。 我想到了环顾四周:你在寻找某事。它可能存在也可能不存在,并且可能返回其他匹配的字符。不过,请更准确地说出你想要什么。 @Jan.当然可以,但是如果该任意字符串不在测试字符串中? @wp78de:为了清楚起见,我想到了这个:regex101.com/r/2OMoO1/1 它以相同的表达式返回柏林或伦敦。一般来说,虽然你不能退货。不存在。 【参考方案1】:非破坏性/r
modifier返回改变的字符串,如果模式匹配
my $arb_str = $string =~ s/$pattern/arbitrary-string/r;
有空since 5.14.0
【讨论】:
但这是一种替代,而不仅仅是一种模式。 @simbabque 这是一个正则表达式,如果模式匹配则返回任意字符串。 (几乎是对问题的引用。)“only-a-pattern”仅在某种正则表达式的上下文中才有意义;我认为它是一个替代品并不重要,因为它会返回。我确实不完全清楚到底想要什么,但这就是我在问题中读到的,我认为。 我同意你的所有观点,我也会给出同样的答案。然而,它让我感到烦恼的是,实际的正则表达式只是模式。s///
实际上是替换运算符。因此,如果我们允许通俗地使用术语regex,我会说这个答案很完美。我可能只是在劈头发。 ;-)
@simbabque 是的,它确实(适当地)进入了语义; 究竟被要求什么?我认为模式本身在代码中没有可操作的含义(它对引擎有用); m/
和 s/
一旦匹配,就会发生不同的事情。如果我们期望(捕获的)模式“返回”,则返回的是m/
(嗯,或者s///r
)。因此,我会选择“正则表达式”的更广泛含义。
@zdim 我必须同意。当我开始在这里探索我的选择时,我也考虑过替换正则表达式,但拒绝了它。在你的回答之后,我更倾向于认为它是最好的,也许是唯一的选择。【参考方案2】:
Answer: 你不能从一个不存在的正则表达式的字符串中得到任何东西。您可以查找具有前瞻功能的字符串,并可以返回该字符串的其他部分,例如与
\b\w+\b(?=\W*wp78de)
见a demo on regex101.com。
要拥有您想要的东西,您很可能需要某种编程语言:
if ($match)
return "some string here";
else
return "some other string";
【讨论】:
【参考方案3】:不,这不是正则表达式所做的事情。但是,正则表达式匹配不一定“返回”任何东西。您所问的将在使用正则表达式的语言细节中得到答案(如果有的话)。如果您能解释您的实际问题以及您使用正则表达式的上下文,您将有更好的机会获得有用的答案。
【讨论】:
以上是关于正则表达式匹配模式 x 但返回任意字符串 y的主要内容,如果未能解决你的问题,请参考以下文章