RegEx: проверка на символ в начале строки - PullRequest
0 голосов
/ 13 ноября 2018

Некоторая информация:

У меня есть регулярное выражение Delphi XE:

(?<=[*+\/drt><=≥≤≠])\-

Входная строка:

-(2*3)

RegExдолжен соответствовать '-', что делает выражение отрицательным.Например:

-(2*3) //Must Match

Но не:

2 - 3 //Must not Match

В приведенном выше примере оператор работает как минус, он не делает все выражение отрицательным.

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

Моя проблема

Если минус находится в началестрока, регулярное выражение не совпадает, потому что впереди нет символа, даже если символ делает все выражение отрицательным.Как мне сопоставить этот минус, даже если он находится в начале строки и перед ним нет символа?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Может быть, вы можете попробовать?

(\-\().+(\))

Начинается с "- (", любой символ, после которого следует ")".

Результирующий ...

-(2*3) //Must Match
2 - 3 //Must not Match
test -(2*3) //Must Match??
test -( 2*3 ) //Must Match??
test -() //Must not Match??
test -( ) //Must Match??
0 голосов
/ 13 ноября 2018

Соответствие либо началу строки, либо символу в классе положительных символов:

(?<=^|[*+/drt><=≥≤≠])-
    ^^

См. онлайн-демонстрацию .

Однако, если вы имеете делос автономными строками более эффективно преобразовать положительный взгляд с положительным классом символов и альтернативу отрицательному взгляду с отрицательным символом:

(?<![^*+/drt><=≥≤≠])-

См. еще одно регулярное выражение demo ,Проверяйте только одну строку за другой, но не все в многострочном режиме.

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

...