проблемы с сопоставлением шаблонов с апострофами

#php #regex

#php #регулярное выражение

Вопрос:

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

Я сопоставляю имена людей, а также названия компаний. Итак, следующее должно быть сопоставлено, и в настоящее время это не так:

tim’s baKeRY

Вот выражение

#^[A-Z][a-z] [ -][A-Z](')?(?(1)[A-Z])[a-z] $#


Редактировать

Благодаря Gustav я отредактировал свое выражение, чтобы: #^[a-zA-Z] [ -][a-zA-Z](')?(?(1)[a-zA-Z])[a-z] $#

Это приводит к нечувствительности к регистру, что было частью того, что мне было нужно, но мне также нужно сопоставить что-то вроде tim's bakery

Ответ №1:

Вы можете сделать /.../i в PHP, чтобы сопоставление не учитывало регистр. Однако, если вы хотите исправить то, что у вас есть, вам нужно заметить, что [A-Z][a-z] будет соответствовать одной начальной заглавной букве, а затем остальным строчным буквам. Если вы хотите сопоставить оба в одном и том же, вам нужно сделать [A-Za-z] .

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

Комментарии:

1. Спасибо, Густав, я отредактировал это, так что теперь это выглядит так: #^[a-zA-Z] [ -][a-zA-Z](')?(?(1)[a-zA-Z])[a-z] $# . Это приводит к нечувствительности к регистру, но как сопоставить что-то вроде tims's balery ?

2. Я могу предоставить вам любое количество шаблонов регулярных выражений, которые будут соответствовать tims's belry , вопрос в том, чему еще вы хотите, чтобы это соответствовало (и чему вы хотите, чтобы это не соответствовало)?

3. Спасибо за помощь, Густав. Я пытаюсь сопоставить имена пользователей, а также названия компаний. Из того, что я могу собрать, код должен соответствовать любым общим символам, которые используются в этих именах. Такие, как апостроф, пробел через дефис, и это, я думаю, все. Обычно это часть «я думаю», которая доставляет мне неприятности. 🙂

4. Ну, ваше первое регулярное выражение соответствует очень конкретным вещам (насколько я могу судить, оно допускает такие имена, как O’Reilly), и добавить туда tim's bakery «и тому подобное» очень сложно, если вы не знаете точно, чему хотите соответствовать. Названия компаний могут отличаться даже больше, чем личные имена, поэтому я предлагаю вам либо точно определить, чему вы хотите соответствовать, либо просто использовать что-то вроде /[a-zA-Z'- ] / и быть довольным этим.