Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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
PHP';Java中的“preg_match_all”功能_Java_Php_Regex_Preg Match - Fatal编程技术网

PHP';Java中的“preg_match_all”功能

PHP';Java中的“preg_match_all”功能,java,php,regex,preg-match,Java,Php,Regex,Preg Match,在PHP中,如果我们需要匹配一个类似于,[“一”、“二”、“三”],我们可以将下面的正则表达式与preg_match一起使用 $pattern = "/\[\"(\w+)\",\"(\w+)\",\"(\w+)\"\]/" 通过使用括号,我们还可以提取单词1、2和3。我知道Java中的Matcher对象,但无法获得类似的功能;我只能提取整个字符串。我如何在Java中模仿preg\u match行为。使用Matcher获得组,您必须使用Matcher.group()方法 例如: Pattern

在PHP中,如果我们需要匹配一个类似于,
[“一”、“二”、“三”]
,我们可以将下面的正则表达式与
preg_match
一起使用

$pattern = "/\[\"(\w+)\",\"(\w+)\",\"(\w+)\"\]/"

通过使用括号,我们还可以提取单词1、2和3。我知道Java中的
Matcher
对象,但无法获得类似的功能;我只能提取整个字符串。我如何在Java中模仿
preg\u match
行为。

使用Matcher获得组,您必须使用
Matcher.group()
方法

例如:

Pattern p = Pattern.compile("\\[\"(\\w+)\",\"(\\w+)\",\"(\\w+)\"\\]");
Matcher m = p.matcher("[\"one\",\"two\",\"three\"]");
boolean b = m.matches();
System.out.println(m.group(1)); //prints one
请记住
组(0)
是相同的整个匹配序列


资源:


Java Pcre是一个提供所有php Pcre函数的Java实现的项目。你可以从那里得到一些想法。查看项目

我知道这篇文章来自2010年,但事实上我刚刚搜索了它,可能其他人也需要它。这是我根据需要创建的函数

基本上,它将用json(或模型,或任何数据源)的值替换所有关键字

如何使用:

JsonObject jsonROw = some_json_object;
String words = "this is an example. please replace these keywords [id], [name], [address] from database";
String newWords = preg_match_all_in_bracket(words, jsonRow);
我在共享适配器中使用这些代码

public static String preg_match_all_in_bracket(String logos, JSONObject row) {
    String startString="\\[", endString="\\]";
    return preg_match_all_in_bracket(logos, row, startString, endString);
}
public static String preg_match_all_in_bracket(String logos, JSONObject row, String startString, String endString) {
    String newLogos = logos, withBracket, noBracket, newValue="";
    try {
        Pattern p = Pattern.compile(startString + "(\\w*)" + endString);
        Matcher m = p.matcher(logos);
        while(m.find()) {
            if(m.groupCount() == 1) {
                noBracket = m.group(1);
                if(row.has(noBracket)) {
                    newValue = ifEmptyOrNullDefault(row.getString(noBracket), "");
                }
                if(isEmptyOrNull(newValue)) {
                    //no need to replace
                } else {
                    withBracket = startString + noBracket + endString;
                    newLogos = newLogos.replaceAll(withBracket, newValue);
                }
            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return newLogos;
}
我也是Java/Android新手,如果您认为这是一个糟糕的实现或其他东西,请随意更正。tks