Tag: pcre

以任何顺序匹配可选捕获组

在解析用户输入时存在许多情况,其中用户有机会向输入添加若干可选标志,这些标志应该以任何顺序被接受。 如何使用正则表达式对其进行解析,以便每个标志位于其自己的捕获组中(如果存在)? 例如: 有一个必需的令牌a ,然后是3个可选的令牌,它们可以按任何顺序排列b , c和d 。 一些可接受的输入将是: a ab ac abc acb abcd adbc acdb 捕获组应始终如下所示: 0 => (anything, this is ignored) 1 => a 2 => b or null 3 => c or null 4 => d or null 这个问题有几个部分已经得到解答: 使用(…)? 表单以使捕获组可选 使用先行(?=.*b)(?=.*c)(?=.*d)允许事物处于任何顺序 但这些策略的组合不起作用: (a)(?=.*(b)?)(?=.*(c)?)(?=.*(d)?) Regex101测试 正则表达式允许以任何顺序找到可选令牌? (答案可以使用任何风格的正则表达式)

如何匹配字符串中的中间字符与正则表达式?

在奇数长度字符串中,您如何匹配(或捕获)中间字符? 这可能与PCRE, 普通 Perl或Java正则表达式有关吗? 使用.NET正则表达式,您可以使用平衡组轻松解决它(这可能是一个很好的例子)。 通过普通的Perl正则表达式,我的意思是不使用任何代码结构,如(??{ … }) ,您可以使用它来运行任何代码,当然也可以做任何事情。 该字符串可以是任何奇数长度。 例如,在字符串12345您需要获取字符串中心的3字符。 这是关于现代正则表达式风格的可能性的问题,而不是以其他方式做到这一点的最佳算法。