_Core/Lexer/LexHelper.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;


namespace ComLib
{
    /// <summary>
    /// Helper class for parsing strings in the format of parameters ( key / value pairs or simple keys )
    /// </summary>
    public class LexHelper
    {
        /// <summary>
        /// Parses the line into a dictionary of key/value pairs.
        /// </summary>
        /// <param name="line">e.g. "-env:prod", "-config:prod.xml", "-date:T-1", "20"</param>
        /// <param name="prefix">Prefix used for named arguments. E.g. "-" as in "-env:prod"</param>
        /// <param name="separator">Separator used between name and value of named arguments. E.g. ":" as in "-env:prod"</param>        
        /// <returns></returns>
        public static IDictionary<string, string> Parse(string line, string prefix, string separator)
        {
            var lexer = new LexArgs();
            var tokens = lexer.ParseText(line);
            return Parse(tokens.ToArray(), prefix, separator);                
        }


        /// <summary>
        /// Parses the arguments into a dictionary of key/value pairs.
        /// </summary>
        /// <param name="args">e.g. "-env:prod", "-config:prod.xml", "-date:T-1", "20"</param>
        /// <param name="prefix">Prefix used for named arguments. E.g. "-" as in "-env:prod"</param>
        /// <param name="separator">Separator used between name and value of named arguments. E.g. ":" as in "-env:prod"</param>        
        /// <returns></returns>
        public static IDictionary<string, string> Parse(string[] args, string prefix, string separator)
        {
            // Validate the inputs.            
            bool checkNamedArgs = !string.IsNullOrEmpty(separator);
            bool hasPrefix = !string.IsNullOrEmpty(prefix);

            // Name of argument can only be letter, number, (-,_,.).
            // The value can be anything.
            string patternKeyValue = @"(?<name>[a-zA-Z0-9\-_\.]+)" + separator + @"(?<value>.+)";
            string patternBool = @"(?<name>[a-zA-Z0-9\-_\.]+)";
            patternKeyValue = hasPrefix ? prefix + patternKeyValue : patternKeyValue;
            patternBool = hasPrefix ? prefix + patternBool : patternBool;

            var map = new Dictionary<string, string>();
            LexHelper.ParseArgs(args, map, null, patternKeyValue, patternBool);
            return map;
        }


        /// <summary>
        /// Checks for named args and gets the name and corresponding value.
        /// </summary>
        /// <param name="args">The arguments to parse</param>
        /// <param name="namedArgs">Dictionary to populate w/ named arguments.</param>
后面还有 33 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。