Regex 冷融残余酶

Regex 冷融残余酶,regex,coldfusion,Regex,Coldfusion,我正在分析一个字符串,它有一些重复的对象,称为Persons。 所以我用一个ReFindNocase得到第一个,然后用一个循环得到其他的。(我还需要每个人的位置和腿)。 然后我发现RematchNocase,但它只返回字符串,而不返回位置。 这两者有什么互补之处吗?例如:为每个匹配返回一个包含len和pos的结构。我不知道您是否找到了要查找的内容,并且没有一些示例数据可供使用,很难说这是否足够,但这可能适合您 <cfscript> function ReFindAll(rex,s

我正在分析一个字符串,它有一些重复的对象,称为Persons。 所以我用一个ReFindNocase得到第一个,然后用一个循环得到其他的。(我还需要每个人的位置和腿)。 然后我发现RematchNocase,但它只返回字符串,而不返回位置。
这两者有什么互补之处吗?例如:为每个匹配返回一个包含len和pos的结构。

我不知道您是否找到了要查找的内容,并且没有一些示例数据可供使用,很难说这是否足够,但这可能适合您

<cfscript>
  function ReFindAll(rex,str) {
    if (not len(arguments.rex)) {
      return {len = [], rex = [], matches = [], err = "Regular Expression Empty"};
    }
    local.Coords = {len = [], pos = [], matches = []};
    local.finding = -1;
    local.findset =  "";
    while (finding neq 0) {
        findset = ReFindNoCase(arguments.rex,arguments.str,finding,true);
        if (finding eq findset.pos[1] + findset.len[1]) {
          return {len = [], rex = [], matches = [], err = "Regex has infinite matches."};
        }
        if (findset.len[1] gt 0) {
         ArrayAppend(Coords.pos,findset.pos);
         ArrayAppend(Coords.len,findset.len);
         ArrayAppend(Coords.matches,mid(arguments.str,findset.pos[1],findset.len[1]));
        }
        finding = findset.pos[1] + findset.len[1];
    }
    return coords;
  }
  cogs = ReFindAll("name\d","name1 = bob name2 = joe name3 = steve");
  writedump(cogs);
</cfscript>

函数ReFindAll(rex、str){
if(不是len(arguments.rex)){
返回{len=[],rex=[],matches=[],err=“Regular Expression Empty”};
}
local.Coords={len=[],pos=[],matches=[]};
local.finding=-1;
local.findset=“”;
while(查找neq 0){
findset=ReFindNoCase(arguments.rex,arguments.str,finding,true);
if(查找等式findset.pos[1]+findset.len[1]){
返回{len=[],rex=[],matches=[],err=“Regex有无限个匹配项。”};
}
如果(findset.len[1]gt 0){
ArrayAppend(Coords.pos、findset.pos);
ArrayAppend(Coords.len,findset.len);
ArrayAppend(Coords.matches,mid(arguments.str,findset.pos[1],findset.len[1]);
}
finding=findset.pos[1]+findset.len[1];
}
返回坐标;
}
cogs=ReFindAll(“name\d”,“name1=bob name2=joe name3=steve”);
书面文件(cogs);

它会进行一些验证,以确保正则表达式包含一些内容,任何内容,并进一步防止正则表达式在同一点上无限循环(如果没有保护措施,
*?
本身将捕获0个字符并继续无限返回0个字符,直到服务器超时或出错).

是本地的吗?不,但是你可以很容易地推出你自己的(尽管先看看cflib.org)。投票也可能有帮助:如果你能提供一些问题的样本数据,那就太好了。(从现在起删除答案)[ReFindNoCase]是我现在使用的。使用Refindnocase时,我必须在文本中循环,因为没有提供文本和位置的CF函数,所以您必须自己动手(循环+Refindnocase、regex等)。