Проблема с регулярным выражением, которую я не могу понять (негативный взгляд сзади) - PullRequest
2 голосов
/ 09 февраля 2009

как мне это сделать с регулярным выражением?

я хочу сопоставить эту строку: -myString

но я не хочу совпадать с -myString в этой строке: --myString

myString - это, конечно, что угодно.

это вообще возможно?

EDIT:

вот немного больше информации о том, что я получил до сих пор, так как я отправил вопрос:

string to match:
some random stuff here -string1, --string2, other stuff here
regex:
(-)([\w])*

Это регулярное выражение возвращает мне 3 совпадения: -string1, - и -string2

в идеале я бы хотел вернуть мне только -string1 матч

Ответы [ 6 ]

11 голосов
/ 09 февраля 2009

Предполагая, что ваш движок регулярных выражений поддерживает (отрицательный) вид сзади:

/(?<!-)-myString/

Perl делает, Javascript нет, например.

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

Не обращая внимания, используйте:

(?:^|(?:[\s,]))(?:\-)([^-][a-zA-Z_0-9]+)

Разбит:

(
  ?:^|(?:[\s,])        # Determine if this is at the beginning of the input,
                       # or is preceded by whitespace or a comma
)
(
  ?:\-                 # Check for the first dash
)
(
  [^-][a-zA-Z_0-9]+    # Capture a string that doesn't start with a dash
                       # (the string you are looking for)
)
0 голосов
/ 09 февраля 2009

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

\b\-\w+
0 голосов
/ 09 февраля 2009

[^ -] {0,1} - [^ \ ш -] +

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

Вы хотите сопоставить строку, начинающуюся с одного тире, но не строку с несколькими тире?

^-[^-]

Пояснение:

^ Matches start of string
- Matches a dash
[^-] Matches anything but a dash
0 голосов
/ 09 февраля 2009
/^[^-]*-myString/

Тестирование:

[~]$ echo -myString | egrep -e '^[^-]*-myString'
-myString
[~]$ echo --myString | egrep -e '^[^-]*-myString'
[~]$ echo test--myString | egrep -e '^[^-]*-myString'
[~]$ echo test --myString | egrep -e '^[^-]*-myString'
[~]$ echo test -myString | egrep -e '^[^-]*-myString'
test -myString
...