Java - 制作一个正则表达式,用于检查某些字母是否在字符串中

时间:2014-04-25 18:50:02

标签: java regex string

我正在尝试使用正则表达式检查某些字符是否在字符串中。例如,如果我有字符串“example”,我希望能够确定字符ela是否在字符串中。我可以使用正则表达式吗?

此外,如果正则表达式包含字符eela,则字符串前面有两个e个实例,这一点非常重要返回true。

提前致谢

3 个答案:

答案 0 :(得分:0)

大编辑:

我收回了我所说的关于使用正则表达式和匹配器的内容,似乎很复杂。如果您只想查看字符串中是否存在所有三个字符串,您应该将字符串转换为字符串,然后针对您要检查的任何字符单独检查每个字符

String myString = "testString";
char[] myCharArray = myString.toCharArray();

接下来,通过使用for循环遍历数组,您可以检查每个单独的字母

for (int i = 0; i < myString.length(); i++) {

if myCharArray[i] = 'a' {
aboolean = true; 
}

if myCharArray[i] = 'e' {
eboolean = true; 
}

}

答案 1 :(得分:0)

yourString.matches("(.*e.*)|(.*l.*)|(.*a.*)";

如果字符串包含"e""l""a",则返回true。

正则表达式中的

".*"可以匹配任何次数。 e显然只匹配e。 |符合逻辑或。将其全部包含在""的{​​{1}}和|两侧的组表达式中以便成功。

  

此外,如果正则表达式包含字符e,e,l和a,则字符串在返回true之前具有两个e实例,这一点非常重要。

yourString.matches("(?=.*l.*)(?=.*a.*).*e.*e.*");

这与两个e,a和a匹配任何东西。

答案 2 :(得分:0)

如果你想匹配任何包含两个或更多e的字符串,在字符串中的任何地方,这个正则表达式都会这样做:

.*e.*e.*

但是扩展这个以寻找其他字符,这可能是字符串中相对于那两个字符的任何位置,并不是微不足道的。你可以通过前瞻来做到这一点:

(?=.*l)(?=.*a).*e.*e.*

匹配,如果在源字符串中的某个点,匹配器可以从该点开始找到所有模式.*l.*a.*e.*e.*。这将以任何顺序判断是否有一个l,一个a和至少两个e。 (如果你想要找两个,那么这样的东西就可以了:)

(?=.*l.*l)(?=.*a).*e.*e.*

但是,这要求匹配器从正则表达式中的每个点开始执行三次扫描。这就是为什么我认为这样的问题可以通过循环更好地解决:

eCount = 0;
aCount = 0;
lCount = 0;
for (int i = 0; i < s.length(); i++) {
   switch(s.charAt(i)) {
      case 'e':
         eCount++;  
         break;
      case 'a':
         aCount++;
         break;
      case 'l':
         lCount++;
         break;
   }
}
if (eCount >= 2 && aCount >= 1 && lCount >= 1) { ... }

更详细,但总的来说我觉得更有效率。