Как получить регулярное выражение для сопоставления элементов с пробелами - PullRequest
1 голос
/ 12 февраля 2009

Следующее регулярное выражение работает, если нет пробела, но если у ввода есть пробел, оно не работает (кажется, что ссылка, но JavaScript не работает).

Как я могу это изменить?

Регулярное выражение должно работать как для World, так и для The World.

    Dim makebkz As String
    Dim pattern As String = "\(bkz: ([a-z0-9$&.öışçğü\s]+)\)"
    Dim regex As New Regex(pattern, RegexOptions.IgnoreCase)
    Dim myAnchor As New System.Web.UI.HtmlControls.HtmlAnchor()
    Dim postbackRef As String = Page.GetPostBackEventReference(myAnchor, "$1")
    myAnchor.HRef = postbackRef

    str = regex.Replace(str, "(bkz: <a href=javascript:" & myAnchor.HRef & "><font color=""#CC0000"">$1</font></a> )")
    makebkz = str
    Return makebkz

Ответы [ 5 ]

2 голосов
/ 12 февраля 2009

Я думаю, что эту строку следует изменить:

str = regex.Replace(str, "(bkz: <a href=javascript:" & myAnchor.HRef & "><font color=""#CC0000"">$1</font></a> )")

Если я правильно прочитал ваш код, вы включили $ 1 в HRef (это то, что делает Page.GetPostBackEventReference (myAnchor, "$ 1")), а затем заменили его в тексте между тегами шрифта и ссылкой поэтому ваш вывод будет примерно таким:

(bkz: <a href=javascript:__doPostBack(The World)><font color=""#CC0000"">The World</font></a> )

Если вы обновите функцию замены на эту, она должна работать:

str = regex.Replace(str, "(bkz: <a href=""javascript:" & myAnchor.HRef & """><font color=""#CC0000"">$1</font></a> )")

т.е. оберните вызов javascript в кавычки, и ваш мир будет хорошим.

2 голосов
/ 12 февраля 2009

На самом деле, есть пробел 'персонаж'. Это '\ s' (без кавычек).

1 голос
/ 12 февраля 2009

Просто чтобы прояснить, вы говорите, что что-то вроде (bkz: world) работает, а (bkz: the world) - нет?

Регулярное выражение, которое у вас есть, будет соответствовать обоим (проверено в RegexBuddy), и ваша группа захвата должна быть в порядке (она должна захватить world в первом случае и the world во втором).

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

1 голос
/ 12 февраля 2009

\ s будет соответствовать любому символу пробела. Обязательно избегайте этого правильно.

0 голосов
/ 12 февраля 2009

попробуйте сделать условный символ пробела \ s * означает, что между блоком bkz: может быть 0 или много пробелов. Вы также можете использовать \ s? если есть 0 или 1 пробел.

Dim pattern As String = "\(bkz:\s*([a-z0-9$&.öışçğü\s]+)\)"

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

Dim pattern As String = "\(bkz:\s*([a-z0-9$&.öışçğü][a-z0-9$&.öışçğü\s]+)\)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...