2014-10-23 2 views
0

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

Мне нужно выполнить поиск по строке, чтобы соответствовать символу P, который не окружен операторами, силовыми или отрицательными знаками. Затем мне нужно вставить знак умножения. Конкретные примеры являются:

33+16*55P would become 33+16*55*P 
2P would become 2*P 
P(33*sin(45)) would become P*(33*sin(45)) 

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

рег это я написал это:

[^\^\+\-\/\*]?P+[^\^\+\-\/\*] 

язык, где будет использоваться регулярное выражение ActionScript 3.

живой пример регулярного выражения можно увидеть по адресу:

http://www.regexr.com/39pkv

Я бы массивно признателен, если кто может показать мне, как я вставить знак умножения в середине матча, т.е. P2, становится P * 2, 22.5P становится 22.5P

ActionScript 3 есть поиск , сопоставлять и заменять функции, которые используют регулярные выражения. Я не уверен, как в этом контексте использовать string.replace (выражение, replaceText).

Большое спасибо заранее

ответ

1

Добро пожаловать в чудо (и неизбежное разочарование, которое приведет к разрыву ваших волос), что является регулярным выражением. Вероятно, вы должны прочитать документацию по адресу using regular expressions in ActionScript, а также this similar question.

Вам необходимо объединить RegExp.test() с функцией String.replace(). Я не знаю ActionScript, поэтому я не знаю, будет ли он работать так, как есть, но на основе документации, приведенной выше, ниже должно быть хорошим началом для тестирования и получения идеи о том, как может выглядеть форма вашего решения как. Я думаю, что @ Vall3y прав. Чтобы получить право на замену, вы должны сначала проверить что-либо, ведущее к P, а затем на что-нибудь после P. Таким образом, две функции, вероятно, легче получить правильно, не слишком приглядясь с регулярным выражением:

private function multiplyBeforeP(str:String):String { 
     var pattern:RegExp = new RegExp("([^\^\+\-\/\*]?)P", "i"); 
     return str.replace(pattern, "$1*P"); 
    } 

    private function multiplyAfterP(str:String):String { 
     var pattern:RegExp = new RegExp("P([^\^\+\-\/\*])", "i"); 
     return str.replace(pattern, "P*$1"); 
    } 
2

Regex используется для поиска шаблонов в строках. Его нельзя использовать для манипулирования ими. Для этого вам нужно будет использовать сценарий действий.

Многие языки программирования имеют метод string.replace, который принимает шаблон регулярного выражения. Поскольку у вас есть два случая (вставка после и перед P), простым решением было бы разделить ваше регулярное выражение на два (например, [^\^\+\-\/\*]?P+ и P+[^\^\+\-\/\*], это может потребовать корректировки) и переключить каждый шаблон с соответствующей строкой («* P "и" P * ")

Смежные вопросы