有没有办法验证包含括号的字符串,以便表达式忽略除最后一个之外的所有字符串?
正则表达式是这样的:(?<function>^(?!\/_).[A-Za-z_]*)\((?<args>[^\)]+\))
,字符串格式如下:
web_convert_param("sEV_4_URL2",
"SourceString={sEV_4}",
"SourceEncoding=HTML",
"TargetEncoding=URL",
"veh_sym_sel=EXT%20CAB%20(8CYL%204x2)",
LAST);
如果在Regex Tester中运行此操作,则会在接下来的两个最后关闭父级停止。在这种情况下这可能吗?
运行它的C#代码如下所示:
try
{
var autoRemove = new ArrayList(ConfigurationManager.AppSettings["AutoRemoveFunctions"].Split(','));
baseFileData = ScriptProperties.ScriptText;
var matches = regEx_SBR.Matches(baseFileData);
foreach (Match match in matches)
{
var functionName = match.Groups["function"].Value.Trim();
if (autoRemove.Contains(functionName) || string.IsNullOrEmpty(functionName)) continue;
var args = match.Groups["args"].Value;
args = match.Groups["args"].Value.Replace("\"", "").Replace("\n", "").Replace("\r", "");
var arguments = args.Split(',');
_scriptFunction = new BaseScriptFunction();
ParseFunction(match.Groups["function"].Value.Trim(), arguments, match.Value.Trim());
if (_scriptFunction.IsNamedTransaction)
{
_scriptFunction.TransactionName = string.Format("{0}{1}",transactionPrefix, _scriptFunction.TransactionName);
}
ScriptFunctions.Add(_scriptFunction);
}
}
答案 0 :(得分:1)
您可以使用[\s\S]
并使用\);
来结束正则表达式吗?像这样:
(?<function>^(?!\/_).[A-Za-z_]*)\((?<args>[\s\S]+?)\);
[\s\S]
匹配任何字符。您可以使用.
,但也可以使用(?s)
标记。
也许你可以试试这个没有最后一个分号的更好的正则表达式:
(?<function>^(?!\/_).[A-Za-z_]*)\((?<args>(?:"[^"]+"|[^\)"]+)+)\)
如果您在参数字符串本身中没有任何"
(转义或不转义),则此方法有效。如果您可以转义"
,则正则表达式必须更长......
(?<function>^(?!\/_).[A-Za-z_]*)\((?<args>(?:"(?:\\.|[^"\\]+)+"|[^\)"]+)+)\)