2014-11-21 3 views
1

Я пытаюсь извлечь содержимое между двумя сломанными в URL-адресе, и для этого я использую функцию stringrstr_match.круглые скобки в str_match меняют совпадение

library(stringr) 
test <- "http://www.lefigaro.fr/flash-actu/2014/04/08/97001-20140408FILWWW00162-ump-cope-defend-sa-gestion-financiere.php" 

мне удается извлечь полную строку:

str_match(test, "http://.*?/.*?/") 

    [,1]         
[1,] "http://www.lefigaro.fr/flash-actu/" 

Но когда я добавить скобки, чтобы извлечь матч в строке, то результат меняется неожиданно:

str_match(test, "http://.*?/(.*?)/") 

    [,1]          [,2] 
[1,] "http://www.lefigaro.fr/flash-actu/2014/" "2014" 

должен быть вопрос о том, как круглые скобки интерпретируются в регулярном выражении. Любая подсказка?

+1

Кажется, что-то не так с библиотекой 'stringr'. –

+1

http://regex101.com/r/bD7yR0/1 –

ответ

1

Возможно, если вы измените (.*?) на ([^/]*?), он будет работать.

  • . соответствует любому символу
  • [^/] матчи все символы, которые не /

Я не привык к stringr, но это то, что я хотел бы сделать в PHP с функциями preg_.

Надеюсь, что это поможет

+0

Спасибо Heru-Luin, ваше предложение работает в этом конкретном случае: 'str_match (test," http: // [^ /] *?/(. *?)/")' выходы "flash-actu". Тем не менее, я не понимаю причину ошибки, если это действительно так, в группе захвата. –

+0

В вашем регулярном выражении также записаны косые черты «/», поэтому он соответствует «вспышка-исполнитель», косая черта и еще один бит. Добавление "[^ /]" запрещает регулярному выражению совпадение с косой чертой, так что теперь он принимает только flash-act :) –