1

Мне нужно преобразовать старый код VB.net в c #, и чтобы ускорить процесс, я планировал использовать регулярные выражения.

Например, в этом фрагменте кода:

if (Request.ServerVariables("SERVER_NAME").StartsWith("user"))
        userS = true;

if (Request.ServerVariables("HTTP_X_ORIGINAL_URL") != null && Request.ServerVariables("HTTP_X_ORIGINAL_URL").StartsWith("/contai"))
        UseContai = true;

Я хочу заменить Request.ServerVariables("...") на Request.ServerVariables["..."] Я попытался использовать Request.ServerVariables("(.*)") Чтобы сопоставить его, но он не работает. Какие-либо предложения?

1 ответ1

2

Парены - это специальный символ в REGEX, так как они создают "подходящую группу". Так что если вам нужно избежать их с обратной косой чертой (\). Вы также хотели бы избежать точки / полной остановки, так как это также имеет особое значение в регулярном выражении:

Request\.ServerVariables\("(.*)"\)

Тем не менее, это довольно либеральное соответствие - чтобы убедиться, что вы проходите только через конечную Request.ServerVariables("...") вы можете вместо этого предпочесть:

Request\.ServerVariables\("([A-z_]+)"\)

Это даст вам соответствие между кавычками только A-z и _ .

Отличным ресурсом для вас, чтобы узнать больше о Regex является Regexr. Он имеет живой текстовый редактор, где вы можете опробовать различные шаблоны и посмотреть, как они соответствуют вашему примеру. Он также имеет окно "Образцы", которое дает вам подсказки о том, что делают части.

Если вы хотите проще найти / заменить (а это не элегантное регулярное выражение), вы можете создать больше подходящих групп:

Find: (Request\.ServerVariables)\(("[A-z_]*")\)
Replace: $1[$2]

Смотрите это здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .