gpt4 book ai didi

java 8元字符的正则表达式

转载 作者:行者123 更新时间:2023-11-30 01:40:56 26 4
gpt4 key购买 nike

尝试编写一个正则表达式来检查句子是否为元字符“我需要支付 50 美元的购买费用,我应该使用 CASH|CC”。在这句话中,我需要确定是否存在元字符。 \\\\$^(\\\\$)\\$Pattern.matches("^([\\\\$]$)", text); 的正确语法是什么来识别特殊字符。我不需要替换,只需识别句子是否包含这些字符。

最佳答案

如果你想知道一个字符串是否包含元字符,你可以使用这样的:

boolean hasIt = sentence.chars().anyMatch(c -> "\\.[]{}()*+?^$|".indexOf(c) >= 0);

通过不使用正则表达式引擎,您无需引用具有特殊含义的字符。

使用Pattern.matches会给任务带来三个不必要的障碍。首先,您必须正确引用所有字符,然后,您需要一个正则表达式构造将字符转换为替代字符,例如[abc]a|b|c,第三,matches 检查整个字符串是否匹配模式,而不是包含出现的情况,因此如果您坚持的话,您需要类似 .*pattern.* 的内容来使 matches 表现得像 find就在上面。

这导致 xy-problem这个任务的。目前尚不清楚您实际想要检查哪些元字符以及为什么首先需要此信息。

如果您想在另一个文本中搜索该句子,只需使用 Pattern.compile(sentence, Pattern.LITERAL) 禁用元字符的解释。或者当您想要组装包含句子的模式时,Pattern.quote(sentence)

但是如果您不想搜索它,则此信息没有相关性。请注意,“这是元字符吗?”可能会导致与“它需要引用吗?”不同的答案。偶this tutorial以一种误导性的方式结合了这些问题。它在两个接近的地方命名了元字符并描述了引用语法,导致了所有这些字符都需要引用的错误印象。

例如,- 仅在字符类中具有特殊含义,因此,如果没有通过 [ 的存在检测到的字符类,则 - 并不暗示元字符的存在。但是,虽然 - 确实需要在字符类中引用,但字符 =! 仅在特定上下文中才是元字符,这需要元字符,所以他们从不需要引用。

但是,如果您尝试检查元字符来决定是使用正则表达式引擎还是执行纯文本搜索,例如通过String.indexOf,您正在执行过早的优化。这不仅浪费了开发工作,在拥有可以测量的实际代码之前进行优化通常会导致相反的结果。使用 Regex 引擎对不包含元字符的字符串执行模式匹配可以比 String 上的普通 indexOf 进行更有效的搜索。在引用实现中,Regex 引擎使用 Boyer Moore algorithmString 上的纯文本搜索方法使用的是朴素搜索。

关于java 8元字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60034458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com