从正则表达式和结果构造字符串(反向匹配)

时间:2014-11-06 21:43:14

标签: javascript php python regex preg-match

有任何可靠的方法从给定的正则表达式构造字符串和"匹配"结果

我正在寻找类似的东西:

stringConstruct('/My name is (?P<name>.*)/', {name: John});

结果&#34;我的名字是John&#34;。所以我需要反函数来进行regexp匹配。

任何非风险语言的答案都是合适的。

2 个答案:

答案 0 :(得分:0)

简短的回答是&#34;否&#34; - 这不是正则表达式的用途。

但是,你可以这样做:

function stringConstruct($stringTemplate, $regex, $input){

     if(preg_match($regex, $input)){
        return  str_replace($regex, $input, $stringTemplate);    
      } else { 
         return false;
      }
}

但是,你必须像这样使用它,而不是:

echo stringConstruct('My name is /(?P<name>.*)/', '/(?P<name>.*)/', "John");

答案 1 :(得分:0)

您可以编写自己的功能。我用Java做过一次,这是一个例子。 sb是一个要处理的字符串。 replaceMap是一个(regexp,replaceStr)映射:

  public static boolean replaceAll(StringBuffer sb, Map<String,String> replaceMap)
  {
    boolean altered = false;
    Iterator<String> it = replaceMap.keySet().iterator();
    while (it.hasNext())
    {
      String toReplace = it.next();
      Matcher mat = Pattern.compile(toReplace).matcher(sb);
      while (mat.find())
      {
        if (!altered)
        {
          altered = true;
        }
        String str = (String) replaceMap.get(toReplace);
        sb.replace(mat.start(), mat.end(), str);
        mat.region(mat.start() + str.length(), sb.length());
      }
    }

    return altered;
  }