0

我在 Android 中找到了一个程序,该程序声称在 AR(“AR_speaker”)中返回标记位置并使用本机代码(jni)。我的问题在markerInfo课堂上。我无法理解这个正则表达式的含义: ^id=(\\d+):name=(.+):pos\\[0\\]=([\\d.]+):pos\\[1\\]=([\\d.]+)$

public class MarkerInfo implements Serializable {
  private static final long serialVersionUID = 1L;
  private static final Pattern REGEX = Pattern.compile("^id=(\\d+):name=(.+):pos\\[0\\]=([\\d.]+):pos\\[1\\]=([\\d.]+)$");
  private Integer id;
  private String fileName;
  private Float[] pos = new Float[3];

  public MarkerInfo(String markerStr) {
    Matcher m = REGEX.matcher(markerStr);
    if (!m.find()) throw new RuntimeException("not markerInfo string : " + markerStr);
    id = Integer.parseInt(m.group(1));
    fileName = m.group(2);
    pos[0] = Float.parseFloat(m.group(3));
    pos[1] = Float.parseFloat(m.group(4));
    //pos[2]=Float.parseFloat(m.group(5));
  }

  public Integer getId() {
    return id;
  }

  public String getFileName() {
    return fileName;
  }

  public Float[] getPos() {
    return pos;
  }
}

我的另一个问题是这些数据存储在哪里?AR 中使用的任何模式都有这些数据吗?在哪个文件中?(例如,在marker.patt 中?)

4

1 回答 1

1

在正则表达式中 ^ 表示“表达式的开头或拒绝字符,但在这种情况下是表达式的开头”,那么这就是表达式在 markerStr 中寻找的内容,正在寻找字符“id =”后跟一个或多个小数字符后跟 ":name=" 后跟一个组 一个或多个任意类型的字符 (这就是 .+ 的意思) 后跟 ":pos[0]=" 后跟一个或多个十进制字符或点 (这就是 [\ d.]+ mean) 后跟 "pos[1]=" 后跟一个或多个十进制字符或点(这就是 [\d.]+ 的意思), $ 表示正则表达式的结尾...

希望对您有所帮助,无论如何我建议您阅读有关 Regex 的内容,它们是在字符串中查找模式的非常好的工具,这就是他们在这种情况下使用它的目的...

问候!

于 2013-09-04T18:25:52.197 回答