2016-11-03 8 views
1

у меня есть выражение preg_match_all, который ищет + - и "и разбивает слова изpreg_match_all игнорировать дефис слова

/[+?-]*"[^"]*"|[+?-]*\b\w+\b/ 

но дефис слово вызывает у меня проблемы , если у меня есть кузнец-бондарь, то он возвращает кузнец -cooper я нуждаюсь в нем, чтобы вернуть smith-cooper в качестве одной записи. Также мне нужен -smith-cooper, который должен быть возвращен как один из совпадений -smith-cooper и -smith -cooper, чтобы вернуть 2 совпадения -smith -cooper. Любая помощь была бы очень признательна.

ответ

0

Если я понимаю, что вы хотите использовать для регулярного выражения, вам нужно только заменить \w+ на [\w-]+, чтобы ваши имена могли включать дефисы. \w соответствует только [a-zA-Z0-9_]

/[+?-]*"[^"]*"|[+?-]*\b[\w-]+\b/

https://regex101.com/r/la5fJg/1

+0

Это работает! Благодаря! Я не уверен, что я должен начать новый поток здесь, но мне нужно также сохранить инициалы (извините, я просто понял это как возможность для ввода пользователем) smith-cooper, j.y. необходимо сохранить как одно совпадение, где, как и в предлагаемом регулярном выражении, они разбиваются на совпадения j и y. Спасибо еще раз за помощь! – user7110318