Как я могу сопоставить этот текст с регулярным выражением?

2

Я попытался сделать выражение регулярного выражения для соответствия фрагменту кода, но не успел. Выражение не работает в vs2008.

Я создал этот файл:

/\*<parameters>\*/(?<value>[\r\n]*.*)/\*</parameters>\*/

источник для соответствия:

/*<parameters>*/ 
@parameter blue
,@parameter2 red
,@parameter3 green
,@parameter4 yellow /*</parameters>*/

Или лучше:

/*<parameters>*/  \r\n @parameter blue \r\n ,@parameter2 red \r\n ,@parameter3 green \r\n ,@parameter4 yellow /*</parameters>*/

Может кто-нибудь мне помочь?

спасибо, Родриго Лобо

Теги:

6 ответов

4
Лучший ответ

Попробуйте выполнить это регулярное выражение: /\*<parameters>\*/(?<value>[^/]*)/\*</parameters>\*/

Хороший инструмент для обмана с помощью реальных шаблонов регулярных выражений С# - regex-freetool на code.google.com

2

RegexOptions.Multiline изменяет только семантику ^ и $ - вам нужно RegexOptions.Singleline, чтобы . совпадало с концами строк (путаница, которую я поймал сам;).

1

Следующее выполнит трюк:

/\*<parameters>\*/(.|\r|\n)*/\*</parameters>\*/

Кроме того, если вы хотите исключить внешние маркеры из самого совпадения:

(?<=/\*<parameters>\*/)(.|\r|\n)*(?=/\*</parameters>\*/)
0

Как сказал Алекс, вы можете использовать модификатор Singleline, чтобы точка совпадала с символами новой строки (\ r и \n). Вы также можете использовать встроенную форму - (?s) - для указания ее внутри самого регулярного выражения:

(?s)/*<parameters>*/(?<value>.*?)/*</parameters>*/
Также обратите внимание на неохотный квантификатор: ".*?". Это в случае, если в тексте имеется более одного потенциального совпадения; в противном случае вы бы соответствовали первому тегу <parameters> последнему тегу </parameters>.
0

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

  • 0
    Regex regex = new Regex (@ "/ * <параметры> * / (? <Value> [\ r \ n] *. *) / * </ Parameters> * /", RegexOptions.Multiline); Match match = regex.Match (scriptText); вернуть совпадение. Успех возвращает false.
  • 0
    «Singleline» - это вариант, который ему нужен, а не Multiline. И часть "[\ r \ n] *" не нужна.
-2

Я не хочу давать вам рыбу для этого вопроса, поэтому вы можете попробовать этот бесплатный инструмент (с регистрацией) у Ultrapico под названием Expresso.

Я несколько раз наткнулся на Regex, и Expresso сохранил этот день во всех случаях.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню