Регулярное выражение для удаления начальной и конечной строки - PullRequest
1 голос
/ 06 марта 2010

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

В настоящее время у меня есть этот бит кода. Проблема на втором выходе, ничего не отображается.

<cfcontent reset="true"/>
<cfset myStr = '<br> <br> <br> <br> This is a great Test<br> do you like my test? <br><br><br>'>


<cfoutput>#myStr#</cfoutput>

<cfset myNewString = REReplaceNoCase(myStr, '(^<.*?>+)|(<.*?>+$)', '' ,'ALL')>

<cfoutput>New: #myNewString#</cfoutput>

Ответы [ 2 ]

1 голос
/ 06 марта 2010

У меня сработало следующее регулярное выражение:

(^<[^>]*?>+)|(<[^>]*?>+$)

Он убрал первый и последний тег, если вы этого хотели.

Однако, + после закрывающей угловой скобки предполагает, что вы, возможно, хотели удалить все теги в начале или в конце; хотя в текущей форме он будет соответствовать одной или нескольким угловым скобкам. Вам нужно использовать группы, чтобы изменить это поведение:

(^(<[^>]*?>\s*)+)|((<[^>]*?>\s*)+$)

При этом удаляются все теги в начале или конце строки.

0 голосов
/ 04 января 2011

Прежде всего извините: это не ответ, я пока не могу комментировать, но я все равно решил дать вам 2 цента.Я нашел вашу проблему заинтригованной и немного ее рассмотрел.

Получается так:

<cfset multipleMatches = REReplaceNoCase(myStr, '(<.*?>+)', '- Match -' ,'ALL')>

будет соответствовать тегам, как и ожидалось, но это:

<cfset singleMatche = REReplaceNoCase(myStr, '(<.*?>+$)', '- Match -' ,'ALL')>

внезапно станет супер жадным.

Мне это кажется ошибкой, но я не уверен, что в отношении регулярных выражений я могу отличить ошибку от достаточно продвинутой функции, именно поэтому использование отрицательногоКлассы персонажей, как Джоуи, - лучший выбор, чтобы не поцарапать голову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...