• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

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

技术杂谈 勤劳的小蚂蚁 2个月前 (02-08) 75次浏览 已收录 0个评论 扫描二维码


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

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

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

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

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

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

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

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


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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

会反转结果。

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

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

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

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

附件是一段代码。


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

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



丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Java正则表达式的十大问题(下)
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00