有任何可靠的方法从给定的正则表达式构造字符串和"匹配"结果
我正在寻找类似的东西:
stringConstruct('/My name is (?P<name>.*)/', {name: John});
结果&#34;我的名字是John&#34;。所以我需要反函数来进行regexp匹配。
任何非风险语言的答案都是合适的。
答案 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;
}