регулярное выражение gsub, только если оно не имеет ничего раньше - PullRequest
0 голосов
/ 27 января 2011

Можно ли сканировать только в том случае, если перед тем, что я сканирую, ничего нет?

Например, у меня есть сообщение, и я сканирую косую черту и то, что следует за ней, но я не хочу сканировать косую черту, если это не начальный символ.

Я хочу сканировать / это, но я не хочу сканировать это / это или http://this.com.

Регулярное выражение, которое я сейчас использую, это ..

/\/(\w+)/

Я использую это с gsub для связи каждого / forwardslash.

Ответы [ 3 ]

3 голосов
/ 27 января 2011

Я думаю, что вы запрашиваете только совпадение слов, начинающихся с '/', а не строк или строк, начинающихся с '/'. Если это правда, я считаю, что следующее регулярное выражение будет работать: %r{(?:^|\s+)/(\w+)}:

Например:

"/foo /this this/that http://this".scan %r{(?:^|\s+)/(\w+)}  # => [["foo"], ["this"]]
2 голосов
/ 27 января 2011

Символ каретки (^) означает «начало строки» - знак доллара ($) означает «конец строки».
Так что

/^\/(\w+)/

... даст вам то, чтоВы хотите - только соответствие в начале строки.

0 голосов
/ 27 января 2011

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

Во-вторых, если вы хотите заменить косую черту, включите ее в захват.

На регулярное выражение.

... если это не начало характер ...

... строки:

!^(/\w+)!

если это не начало характер ...

... слова:

!\s(/\w+)!

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

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