регулярное выражение для textarea - PullRequest
0 голосов
/ 02 декабря 2009

Я ищу регулярное выражение, чтобы отфильтровывать все \ r \ n из html-файла, но если есть текстовое поле, оно должно быть пропущено без удаления ввода.

Я использую технологию .NET (C #).

Ответы [ 5 ]

3 голосов
/ 02 декабря 2009

Не используйте регулярные выражения - используйте анализатор HTML.

2 голосов
/ 02 декабря 2009

Говоря о HTML-парсерах, Html Agility Pack отлично подходит для решения подобных проблем.

0 голосов
/ 03 декабря 2009

Прочитайте это: RegEx соответствует открытым тегам, кроме автономных тегов XHTML

Этот вопрос - все равно что сказать, как ты делаешь болт с молотком. Теперь я уверен, что если бы вы были достаточно полны решимости, вы могли бы затянуть болт молотком. Однако, по меньшей мере, будет трудно и проблематично, и есть вероятность, что вы что-то сломаете, пытаясь.

Сделайте шаг назад, отбросьте предположение, что ваш молоток - лучший инструмент, и вернитесь к своему ящику с инструментами, если вы покопаетесь там, то найдете лучший инструмент, который называется HTML-парсер.

0 голосов
/ 02 декабря 2009

Это очень похоже на этот ответ Я уже давал.

К счастью, .NET имеет сбалансированное соответствие .

Так что вы можете сделать это:

(<textarea[^>]*>[^<>]*(((?<Open><)[^<>]*)+((?<Close-Open>>)[^<>]*)+)*(?(Open)(?!))</textarea>)|\r\n

Затем вы можете выполнить замену на 1 доллар.

Вот оно в действии: http://regexhero.net/tester/?id=292c5529-5fe8-42e9-8d72-d7ea9ab9e1fe

Надеюсь, это поможет. Преимущество такого сбалансированного соответствия заключается в том, что он достаточно мощный, чтобы обрабатывать вложенные теги, свойственные HTML.

Однако, это все еще не на 100% надежно. Комментарии еще могут скинуть. И, конечно, это также безумно сложное регулярное выражение, которым нужно управлять, если вам когда-либо понадобится внести изменения. Так что вы все равно можете захотеть использовать html-парсер.

0 голосов
/ 02 декабря 2009

Альтернативный подход:

  1. Найти с помощью регулярных выражений позицию (в строке), где находится элемент textarea. Подходящее регулярное выражение для этого будет: (<textarea>(.*?)</textarea>)
  2. Удалите символы \ r \ n отовсюду, кроме мест, которые вы нашли на # 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...