Как мне написать регулярное выражение, которое соответствует всем символам, которые не являются '$', сопровождаемыми 'i' или '{'? - PullRequest
2 голосов
/ 24 октября 2010

Значение, я хочу соответствовать:

$10

или

$

но не это:

${name}

или

$image{http://wrfgadgadga.com/gadgad.png}

Я также хочу сопоставить все остальное ... нормальные символы, символы, цифры и т. Д.

Совпадение всего, кроме того, что начинается с $, очень просто. Это так:

def literalCharacter: Parser[String] = """[^\$]""".r

Я пробовал синтаксис упреждения регулярных выражений, используя (?! I) или (?! {) В многочисленных комбинациях, но, похоже, я не могу заставить его работать. Я также попытался переписать его с = вместо! как это: (? = я)

По сути, я пытался внедрить эти упреждения всеми способами, которые я могу отобразить с помощью выражения [^ \ $], и я не могу заставить его работать.

Помощь

РЕДАКТИРОВАТЬ : Хм, это похоже на работу:

[^\$]|\$(?!i)|\$(?!\{)

1 Ответ

3 голосов
/ 24 октября 2010

Ваша не будет соответствовать строки как x$ должным образом.Если вы хотите сопоставить всю строку, попробуйте

"""^\$$|^[^\$].*$|^\$[^i\{].*$"""

, где мы сопоставляем любую из трех последовательностей, разделенных |:

^\$$
^[^\$]+.*$
^\$[^i\{]+.*$

Давайте разберем это:

// First pattern--match lone '$' character
^   // Matches start of string
\$  // Matches the literal character '$'
$   // Matches end of string

// Second pattern--match a string starting with a character other than '$'
^       // Start of string
[^\$]+  // Match at least one non-'$':    
           +   // Match one or more
      [^  ]    // ...of characters NOT listed...
        \$     // ...namely, a literal '$'
.*      // Any number of other characters
$       // End of the string

// Third pattern--match a string starting with '$' but not '$i' or '${'
^        // Start of string
\$       // The literal character '$'
[^i\{]+  // Match at least one non-'i'/non-'{'
.*       // Any number of other characters
$        // End of the string

Если вы не соответствуете всей строке, вам нужно беспокоиться о таких вещах, как foo$image{Hi}.Если вы хотите сопоставить и пустую строку, добавьте ^$| к совпадению.

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

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