/// <summary> /// Goes through <paramref name="m"/> matches and fill <paramref name="matches"/> array with results /// according to Set Order. /// </summary> /// <param name="r"><see cref="Regex"/> that produced the match</param> /// <param name="m"><see cref="Match"/> to iterate through all matches by NextMatch() call.</param> /// <param name="matches">Array for storing results.</param> /// <param name="addOffsets">Whether or not add arrays with offsets instead of strings.</param> /// <returns>Number of full pattern matches.</returns> static int FillMatchesArrayAllSetOrder(PerlRegex.Regex r, PerlRegex.Match m, ref PhpArray matches, bool addOffsets) { // first index, increases at each match in set order int i = 0; while (m.Success) { var pa = new PhpArray(m.Groups.Count); // add all groups for (int j = 0; j < m.Groups.Count; j++) { var arr = NewArrayItem(m.Groups[j].Value, m.Groups[j].Index, addOffsets); AddGroupNameToResult(r, pa, j, (p, groupName) => { p[groupName] = arr; }); pa[j] = arr; } matches[i] = (PhpValue)pa; i++; m = m.NextMatch(); } return(i); }
/// <summary> /// Goes through <paramref name="m"/> matches and fill <paramref name="matches"/> array with results /// according to Pattern Order. /// </summary> /// <param name="r"><see cref="Regex"/> that produced the match</param> /// <param name="m"><see cref="Match"/> to iterate through all matches by NextMatch() call.</param> /// <param name="matches">Array for storing results.</param> /// <param name="addOffsets">Whether or not add arrays with offsets instead of strings.</param> /// <returns>Number of full pattern matches.</returns> static int FillMatchesArrayAllPatternOrder(PerlRegex.Regex r, PerlRegex.Match m, ref PhpArray matches, bool addOffsets) { // second index, increases at each match in pattern order int j = 0; while (m.Success) { // add all groups for (int i = 0; i < m.Groups.Count; i++) { var arr = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, addOffsets); AddGroupNameToResult(r, matches, i, (ms, groupName) => { if (j == 0) { ms[groupName] = (PhpValue) new PhpArray(); } ((PhpArray)ms[groupName])[j] = arr; }); if (j == 0) { matches[i] = (PhpValue) new PhpArray(); } ((PhpArray)matches[i])[j] = arr; } j++; m = m.NextMatch(); } return(j); }
/// <summary> /// Goes through <paramref name="m"/> matches and fill <paramref name="matches"/> array with results /// according to Pattern Order. /// </summary> /// <param name="r"><see cref="Regex"/> that produced the match</param> /// <param name="m"><see cref="Match"/> to iterate through all matches by NextMatch() call.</param> /// <param name="matches">Array for storing results.</param> /// <param name="addOffsets">Whether or not add arrays with offsets instead of strings.</param> /// <returns>Number of full pattern matches.</returns> static int FillMatchesArrayAllPatternOrder(PerlRegex.Regex r, PerlRegex.Match m, ref PhpArray matches, bool addOffsets) { // second index, increases at each match in pattern order int j = 0; while (m.Success) { // add all groups for (int i = 0; i < m.Groups.Count; i++) { var arr = NewArrayItem(m.Groups[i].Value, m.Groups[i].Index, addOffsets); AddGroupNameToResult(r, matches, i, (ms, groupName) => { if (!ms.TryGetValue(groupName, out var groupValue) || !groupValue.IsPhpArray(out var group)) { ms[groupName] = group = new PhpArray(); } group[j] = arr; // TODO: DeepCopy ? });