Java正则表达式的十大问题(下)


1. 如何将anbn与Java正则表达式匹配

这是所有非空字符串的语言,这些字符串由一定数量的a后跟相同数量的b组成,如ab、aabb和aaabbb。

这种语言可以显示上下文无关文法年代→aSb | ab,因此一种非正式语言。

然而,Java regex实现可以识别的不仅仅是常规语言。

也就是说,根据形式语言理论的定义,它们不是“规则的”。

使用前瞻性和自引用匹配就可以实现。

在这里,我将首先给出最后的正则表达式,然后稍微解释一下。

全面的解释,我会参考您阅读我们如何匹配^ n b ^ n与Java正则表达式。

Java正则表达式的十大问题(下)

2. 如何将字符串中的两个或多个空格替换为单个空格并仅删除前导空格

replaceall()用给定的替换替换与给定正则表达式匹配的每个子字符串。

“2个或多个空格”可以用正则表达式[]+表示。

因此,下面的代码可以工作。

请注意,该解决方案最终不会删除所有前导和尾随的空白。

如果希望删除它们,可以在管道中使用String.trim()。

Java正则表达式的十大问题(下)

3. 如何使用正则表达式确定一个数字是否是素数

Java正则表达式的十大问题(下)

该函数首先生成n个字符,并尝试查看该字符串是否匹配。?|(..+?)\1+。

如果是素数,表达式将返回false和!会反转结果。

第一部分。确保1不是引物。

主要部分是使用反向引用的第二部分。

(..+?)\1+先尝试匹配n个字符长度,然后用\1+重复几次。

根据定义,素数是大于1的自然数,除1和它自身外没有正因子。

这意味着如果a=n*m那么a不是素数。

n*m可以进一步解释为“重复n m次”,这正是正则表达式所做的:使用(..+?)匹配n个字符长度,然后使用\1+重复m次。

因此,如果模式匹配,则数字不是素数,否则就是素数。
提醒!

会反转结果。

4. 如何分割逗号分隔的字符串,但忽略引号中的逗号

您已经到了正则表达式崩溃的地步。

编写一个简单的拆分器更好,也更整洁,可以按照您的意愿处理特殊情况。

另外,您可以使用switch语句或if-else来模拟有限状态机的操作。

附件是一段代码。

Java正则表达式的十大问题(下)

5. 如何在Java正则表达式中使用反向引用

反向引用是Java正则表达式中的另一个有用特性。


本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » Java正则表达式的十大问题(下)
分享到:
赞(0)

评论抢沙发

评论前必须登录!