比如说查询是否同时含有a,b,c,d四个字母,但它们的顺序是任意的,只要同时含有即可,这样的能用正则写出来吗?

解决方案 »

  1.   


    import java.util.Scanner;
    public class Main {
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入待测试的字符串:");
    String str = input.next();
    if(str.indexOf('a') != -1 && str.indexOf('b') != -1 &&
    str.indexOf('c') != -1 && str.indexOf('d') != -1) {
    System.out.println("字符串" + str + ",同时含有a、b、c、d");
    } else {
    System.out.println("字符串" + str + ",不同时含有a、b、c、d");
    }
    }
    }这样就好了,用正则感觉很困难!
      

  2.   

    (?:?<!(?:[^a]|[^b]|[^c]|[^d])) 
      

  3.   

    包含的话不难写,要是顺序任意的话就太麻烦了,还不如用java遍历判断呢
      

  4.   

    纠正:那个不对。
    挺困难
    暂时 可以 匹配4次  abcd 分别匹配呢?
      

  5.   

    表述问题如下
      要有 a 至少一次, 并且 要有 b 至少一次, 并且 要有 c 至少一次, 并且 要有 d 至少一次
    所以,应该可以写成
      a+ && b+ && c+ && d+
    可惜正则表达式不支持 &&
    所以,原本打算写成
    if (string.match(".*a+.*&&.*b+.*&&.*c+.*&&.*d+.*"))
    只好写成
    if (string.match(".*a+.*")&&string.match(".*b+.*")&&string.match(".*c+.*")&&string.match(".*d+.*"))

      

  6.   


    .*[a-d]+.*[a-d]+.*[a-d]+.*[a-d]+haha  不知道行不行
      

  7.   

    一定要用正則表示式結果就是非常難看的程式碼
    如下
    (.*a.*b.*c.*d.*)|(.*a.*b.*d.*c.*)|(.*a.*c.*b.*d.*)|(.*a.*c.*d.*b.*)|(.*a.*d.*b.*c.*)|(.*a.*d.*c.*b.*)|(.*b.*a.*c.*d.*)|(.*b.*a.*d.*c.*)|(.*b.*c.*a.*d.*)|(.*b.*c.*d.*a.*)|(.*b.*d.*a.*c.*)|(.*b.*d.*c.*a.*)|(.*c.*a.*b.*d.*)|(.*c.*a.*d.*b.*)|(.*c.*b.*a.*d.*)|(.*c.*b.*d.*a.*)|(.*c.*d.*a.*b.*)|(.*c.*d.*b.*a.*)|(.*d.*a.*b.*c.*)|(.*d.*a.*c.*b.*)|(.*d.*b.*a.*c.*)|(.*d.*b.*c.*a.*)|(.*d.*c.*a.*b.*)|(.*d.*c.*b.*a.*)