Отделение слова от слова (Regex & PHP) - PullRequest
3 голосов
/ 07 июня 2019

Я создал следующий код регулярного выражения, чтобы найти и отделить начальную заглавную букву в слове.

 $string = "hello worldB. What are you doing now";
 $string = "hello worldB.What are you doing now"; // variant 2
 $clean = preg_replace('/[a-z0-9]+(?:[A-Z].+)/', '? ', $string);

Ошибка регулярного выражения. Вы можете мне помочь?

Демо

Ответы [ 3 ]

2 голосов
/ 07 июня 2019

В вашем регулярном выражении точка не экранирована и соответствует любым символам, кроме символов разрыва строки. Кроме того, (?:[A-Z].+) - это группа без захвата, а ее шаблон потребляет . Вам либо нужна группа захвата, а затем замена должна содержать обратную ссылку на эту группу, либо упущение, непотребляющий шаблон.

Вы можете использовать

$s = preg_replace('~[a-z0-9](?=[A-Z]\.)~', '$0 ', $s);

См. Демоверсию regex .

Детали

Обратите внимание, что $0 является заполнителем для всего значения совпадения, найденного регулярным выражением.

1 голос
/ 07 июня 2019

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

([a-z])([A-Z])

Демо 1

Здесь, если это возможноМы не будем связывать это справа.

Тест

$re = '/([a-z])([A-Z])/m';
$str = 'hello worldB. What are you doing now
hello worldB.What are you doing now
';
$subst = '$1 $2';

$result = preg_replace($re, $subst, $str);

echo "The result of the substitution is ".$result;

Если мы хотим просто захватить это, мы можем просто использовать это простое выражение:

[a-z]([A-Z])

или

[a-z]([A-Z])\.

Демонстрация 2

Тест

$re = '/[a-z]([A-Z])/m';
$str = 'hello worldB. What are you doing now
hello worldB.What are you doing now
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

RegEx

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

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

0 голосов
/ 07 июня 2019

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

[a-z0-9]+([A-Z]{1})

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

См. DEMO .

Однако, если все, что вам нужно, это найти первую заглавную букву, вы должны использовать более инклюзивное регулярное выражение, которое будет соответствовать пробелам, специальным символам и другим вещам:

.*([A-Z]{1}).*

См. DEMO .

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