java contains 正则表达式_如何在J中的String.contains()方法中使用正则表达式

如何在J中的String.contains()方法中使用正则表达式

我想检查一个String是否包含单词" stores"," store" 和"产品" 以该顺序。 无论他们之间是什么。

我尝试使用someString.contains(stores%store%product);和.contains("stores%store%product");

我是否需要明确声明正则表达式并将其传递给方法,否则我无法通过正则表达式?

vipin8169 asked 2019-08-12T18:02:16Z

5个解决方案

106 votes

String.contains

.适用于String,句点。 它不适用于正则表达式。 它将检查指定的确切String是否出现在当前String中。

请注意,.不检查字边界; 它只是检查子串。

正则表达式解决方案

正则表达式比.更强大,因为您可以对关键字(以及其他内容)强制执行单词边界。 这意味着您可以将关键字搜索为单词,而不仅仅是子字符串。

使用.以及以下正则表达式:

"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"

RAW正则表达式(删除字符串文字中的转义 - 这是你打印出上面的字符串时得到的):

(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*

.检查单词边界,这样您就不会得到(?s)的匹配。请注意,.也被拒绝,因为数字和_被认为是单词的一部分,但我怀疑这种情况是以自然文本形式出现的。

由于双边都检查了单词边界,因此上面的正则表达式将搜索确切的单词。 换句话说,.将与上面的正则表达式匹配,因为您正在搜索单词(?s) without .。

.通常匹配除了许多新行字符之外的任何字符。 (?s)在开头.匹配任何字符无例外(感谢Tim Pietzcker指出这一点)。

nhahtdh answered 2019-08-12T18:03:34Z

84 votes

matcher.find()做你需要的。 例:

Pattern.compile("stores.*store.*product").matcher(someString).find();

eugene82 answered 2019-08-12T18:03:59Z

17 votes

您可以简单地使用matches的String类方法。

boolean result = someString.matches("stores.*store.*product.*");

san1deep2set3hi answered 2019-08-12T18:04:25Z

1 votes

public static void main(String[] args) {

String test = "something hear - to - find some to or tows";

System.out.println("1.result: " + contains("- to -( \\w+) som", test, null));

System.out.println("2.result: " + contains("- to -( \\w+) som", test, 5));

}

static boolean contains(String pattern, String text, Integer fromIndex){

if(fromIndex != null && fromIndex < text.length())

return Pattern.compile(pattern).matcher(text).find();

return Pattern.compile(pattern).matcher(text).find();

}

结果:是的

结果:是的

Ar maj answered 2019-08-12T18:04:57Z

0 votes

如果你想检查一个字符串是否包含使用正则表达式的子字符串,你可以做的最接近的是使用find() -

private static final validPattern = "\\bstores\\b.*\\bstore\\b.*\\bproduct\\b"

Pattern pattern = Pattern.compile(validPattern);

Matcher matcher = pattern.matcher(inputString);

System.out.print(matcher.find()); // should print true or false.

注意match()和find()之间的区别,匹配()如果整个字符串与给定模式匹配则返回true。 find()尝试查找与给定输入字符串中的模式匹配的子字符串。 另外,通过使用find(),您不必在开头添加额外的匹配,例如 - (?s)。*,在正则表达式模式的末尾添加。*。

P C answered 2019-08-12T18:05:31Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值