Звезда обратной косой черты регулярного выражения - PullRequest
7 голосов
/ 01 августа 2011

Не могу разобраться с этим, это соответствует одной звезде:

// Escaped multiply
Text = Text.replace(new RegExp("\\*", "g"), '[MULTIPLY]');

Но мне нужно, чтобы оно совпадало с \*, я пробовал:

\\*
\\\\*
\\\\\*

Не могу разобраться, спасибо за любую помощь!

Ответы [ 3 ]

11 голосов
/ 01 августа 2011

Вы были близки, \\\\\\* сделал бы это.

Лучше использовать дословные строки, что облегчает:

RegExp(@"\\\*", "g")

\\ соответствует буквенной обратной косой черте (\\\\ в обычной строке), \* соответствует звездочке (\\* в обычной строке).

4 голосов
/ 01 августа 2011

Помните, что есть два «уровня» побега.

Во-первых, вы экранируете свои строки для компилятора C #, и вы также экранируете свои строки для движка Regex.

Если вы хотите сопоставить "\*" буквально, тогда вам нужно экранировать оба этих символа для движка регулярных выражений, так как в противном случае они означают что-то другое. Мы избегаем их с помощью обратной косой черты, поэтому у вас будет "\\\*".

Затем мы должны избежать обратной косой черты, чтобы записать их в виде буквенной строки. Это означает замену каждого обратного слеша двумя обратными слешами: "\\\\\\*".

Вместо этой последней части мы могли бы использовать «дословную строку», в которой экранирование не применяется. В этом случае вам нужен только результат первого побега: @"\\\*".

0 голосов
/ 01 августа 2011

Ваш синтаксис совершенно неверен. Это больше похоже на Javascript, чем на C #.

Это прекрасно работает:

string Text = "asdf*sadf";

Text = Regex.Replace(Text, "\\*", "[MULTIPLY]");

Console.WriteLine(Text);

Выход:

asdf[MULTIPLY]sadf

Для соответствия \* вы должны использовать шаблон "\\\\\\*".

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