Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java正则表达式:(C标识符后跟_ux)_Java_Regex - Fatal编程技术网

java正则表达式:(C标识符后跟_ux)

java正则表达式:(C标识符后跟_ux),java,regex,Java,Regex,我正在寻找一种方法来匹配后跟双下划线的C标识符。但问题是:如果标识符以一系列下划线结尾,我需要它是非贪婪的 我几乎用^([\u A-Za-z][\u A-Za-z0-9]*?)\uuu获得了它,但有一组棘手的情况,标识符可以以一系列下划线结尾: string expected identifier abcd0__ abcd0 abcd0___ abcd0_ abcd0____ abcd0__ abcd__0__ abcd a

我正在寻找一种方法来匹配后跟双下划线的C标识符。但问题是:如果标识符以一系列下划线结尾,我需要它是非贪婪的

我几乎用
^([\u A-Za-z][\u A-Za-z0-9]*?)\uuu
获得了它,但有一组棘手的情况,标识符可以以一系列下划线结尾:

string          expected identifier
abcd0__         abcd0
abcd0___        abcd0_
abcd0____       abcd0__
abcd__0__       abcd
abcd___0__      abcd_
abcd____0__     abcd__
有没有办法修改正则表达式以生成上面列出的预期组匹配

以下是打印错误输出的测试程序:

abcd0__ -> match is abcd0
abcd0___ -> match is abcd0
abcd0____ -> match is abcd0
abcd__0__ -> match is abcd
abcd___0__ -> match is abcd
abcd____0__ -> match is abcd
Regex3.java:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex3 {
    final static private Pattern pattern = 
       Pattern.compile("^([_A-Za-z][_A-Za-z0-9]*?)__");

    static public void main(String[] args)
    {
        String[] items = {
                "abcd0__",
                "abcd0___",
                "abcd0____",
                "abcd__0__",
                "abcd___0__"
                "abcd____0__"
        };
        for (String item : items)
            test(item);
    }
    private static void test(String item) {
        Matcher m = pattern.matcher(item);
        if (m.find())
        {
            System.out.println(item+" -> match is "+m.group(1));
        }
        else
        {
            System.out.println(item+" -> no match");            
        }
    }
}
模式
^([\u A-Za-z][\u A-Za-z0-9]*?*)\u{2}
应该与您期望的标识符匹配。

^[\u A-Za-z](?:[A-Za-z0-9])*。*(?=\uz)

在squarefree shell中的JavaScript中

var re = /^[_A-Za-z](?:_?[A-Za-z0-9])*_*(?=__)/
var arr = ["abcd0__", "abcd0___", "abcd0____", "abcd__0__", "abcd___0__",
           "abcd____0__", "abcd", "abcd_"]
for (var i = 0; i < arr.length; i++) {
  print(arr[i] + " : " + re.exec(arr[i]));
}

嗯,几乎是对的,但它不符合我的要求。参见我的示例案例。在至少两个下划线的第一个系列中,我需要至少停止两个下划线。@Jason S,我想我明白了。编辑。
abcd0__ : abcd0
abcd0___ : abcd0_
abcd0____ : abcd0__
abcd__0__ : abcd
abcd___0__ : abcd_
abcd____0__ : abcd__
abcd : null
abcd_ : null