Java-Regex获取word是否包含另一个单词的所有字母

Java-Regex获取word是否包含另一个单词的所有字母,java,regex,Java,Regex,是否可以创建java正则表达式来定义一个单词(base)是否包含另一个单词(创建哪个正则表达式的示例)的所有字母 比如说 输入:base='Subexpressions',sample1='Nubs' 输出:True 输入:base='Subexpressions',sample2='Expert' 输出:错误 说明:base包含来自sample1的所有字母,但不包含来自sample2的“t”。此问题实际上不需要正则表达式。只需使用以下简单方法: 将布尔变量found设置为true 逐个字符迭代

是否可以创建java正则表达式来定义一个单词(base)是否包含另一个单词(创建哪个正则表达式的示例)的所有字母

比如说

输入:base='Subexpressions',sample1='Nubs' 输出
True

输入:base='Subexpressions',sample2='Expert' 输出
错误


说明:base包含来自sample1的所有字母,但不包含来自sample2的“t”。

此问题实际上不需要正则表达式。只需使用以下简单方法:

  • 将布尔变量
    found
    设置为
    true
  • 逐个字符迭代
    sample
    变量
  • 检查
    base
    字符串变量中是否存在每个字符
  • 如果未找到字符并跳出循环,则将
    found
    设置为false

  • 对于正则表达式方法,以下是如何以编程方式实现它

  • 列出字母:
    子表达式
    =>子表达式
  • 用字母构建一系列lookahead,并锚定它:
    ^(?=.*s)(?=.*u)等(?=.*n)$
  • 对字符串运行该正则表达式。它将充当AND,因为lookaheads逐个检查目标字符串中是否存在字母。如果你有比赛,宾果
  • 当然,运行strstr
    10次(每个字符一次)也可以

    注意:有些引擎可能会奇怪地报告零宽度匹配,因此为了安全起见,您可以在lookaheads后添加一个点,确保匹配中至少有一个字符:

    ^(?=.*s)(?=.*u)etc(?=.*n)$
    

    您不关心字符,只关心是否有匹配项。

    为什么需要正则表达式?@Duncan It必须使代码简洁明了,如
    base.matches(createRegex(sample))
    。没有对基本单词和示例单词索引的迭代。嗯。。。如果要在方法名中隐藏复杂性,则可以执行所有您喜欢的迭代,并将其称为
    containsAll(base,sample)
    。我怀疑由此产生的正则表达式将很难阅读,因此更难维护。谢谢。稍微修改一下这个解决方案对我来说很好:
    (.*)(?=.*s)(?=.*u)等(?=.*n)(.*)
    还有什么其他选项可以让它更快?