using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"CIgcCursor.*<.*>\s*(\w*)[^}]*?(?:while|for)\s*\(.*?\n.*?(\{(?>[^{}]|(?-1))*\})";
string input = @"Return_t
rgRoadNameChanges(Maneuver_o *pManeuverObj, rgManeuver_t *pManeuver, bool& bIsChanged)
{
Return_t Result;
Sint_t iIndex;
utSegment_t Seg;
utSegmentInfo_t SegInfo;
Uint_t nDist = 0;
DBID_t prevNavFeatureID;
DBID_t currDBID;
CIgcCursor_Sdal<DBNavFeatureAndAttrs_t> cursorFeature(true);
bIsChanged = false;
DBID_SET_NULL(prevNavFeatureID);
iIndex = pManeuver->RouteIndex;
while (nDist < 800)
{
if ((Result = utRouteGetSegment(pManeuverObj->hRoute, &Seg, iIndex)) == SDAL_FAILURE)
return NT_SUCCESS;
if ((Result = utSegmentGetInfo(&Seg, &SegInfo, NULL)) == SDAL_FAILURE)
return NT_TRACE(Result, NT_ERR_STR(""rgRoadNameChanges: utSegmentGetInfo failed!""));
if ((Result = utSegmentGetDBID(&Seg, &currDBID, NULL)) == SDAL_FAILURE)
return NT_TRACE(Result, NT_ERR_STR(""rgRoadNameChanges: utSegmentGetDBID failed!""));
Result = iDbGetSegNavFeatures(&currDBID, 0, cursorFeature);
if (Result > 0)
{
// Just comparing the first nav features for now. I don't know if we
// need to check all against the other list in case the order of the
// nav features changes. I'm assuming they'll stay the same order.
if (!(++cursorFeature).NoMoreRecords())
{
if (!DBID_IS_NULL(prevNavFeatureID)
&& (iGuCompareDBIDsEqual(&prevNavFeatureID, &cursorFeature->navFeature.navFeatureID, GU_COMPARE_FULL_IDS) != 0))
{
bIsChanged = true;
break;
}
utMemcpy(&prevNavFeatureID, &cursorFeature->navFeature.navFeatureID, sizeof(DBID_t));
}
}
nDist += SegInfo.length;
iIndex++;
}
}";
foreach (Match m in Regex.Matches(input, pattern))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx