найти слово перед второй запятой с регулярным выражением - PullRequest
0 голосов
/ 16 декабря 2009

Я хочу сохранить слово перед второй запятой в строке.

Итак, если строка выглядит следующим образом: Здравствуйте, меня зовут Дэвид, бла-бла.

Я хочу установить переменную $ test = David

Ответы [ 7 ]

11 голосов
/ 16 декабря 2009
^[^,]*,[^,]*\b(\w+)\b,

^ - начало строки / строки
[^ ] - Любой персонаж не является ...
, - ... запятая
* - ноль или более предшествующих
, - запятая
[^,]* - Опять же, любой символ, не являющийся запятой, повторяется ноль или более раз
\b - граница слова (нулевая ширина)
( ) - группа захвата
\w - любой символ слова
+ - один или несколько из предыдущих
\b - граница слова (нулевая ширина)
, - запятая

3 голосов
/ 16 декабря 2009

Ваше регулярное выражение может выглядеть примерно так:

^[^,]*,[^,]*\b(\w+),

Соответствует любой последовательности не запятых, за которой следует первая запятая, за которой следуют дополнительные не запятые, затем граница слова и ваше действительное слово, а затем вторая запятая.

2 голосов
/ 16 декабря 2009

это веб-инструмент, имя которого txt2re

0 голосов
/ 10 мая 2014

Хокей, я знаю, что это старо, но я тренируюсь ...

Как насчет /,.*?(\w+),/?

У этого превосходного инструмента есть сохраненное объяснение: http://regex101.com/r/yA4gN5

  • , соответствует символу, буквально
  • .*? соответствует любому символу (кроме новой строки)
    • Квантификатор: от нуля до неограниченного числа раз, насколько это возможно, с расширением по мере необходимости [ленивый]
  • 1-я группа захвата (\w+)
    • \w+ соответствует любому символу слова [a-zA-Z0-9 _]
    • Квантор: от одного до неограниченного количества раз, сколько возможно, отдача по мере необходимости [жадный]
  • , соответствует персонажу, буквально

Это регулярное выражение (и некоторые из вышеприведенных) завершается неудачей, если Дэвид вводит несловесный символ после своего имени, поэтому «Дэвид!» И «Дэвид» оба терпят неудачу.

0 голосов
/ 16 декабря 2009

А вот и мой подход:

<?php
    $input  = 'Hello, my name is David, bla bla.';
    $tmp    = substr( $input, 0, strpos( $input, ',', strpos( $input, ',' ) + 1 ) );
    $word   = substr( $tmp, strrpos( $tmp, ' ' ) + 1 );
    echo $word;
?>
0 голосов
/ 16 декабря 2009
$s = "Hello, my name is David, bla bla.";
$s = explode(',', $s);
$s = explode(' ', $s[1]);
$test = $s[sizeof($s)-1];

print $test;
'David'
0 голосов
/ 16 декабря 2009
<?php

    $s = "Hello, my name is David, bla bla.";

    preg_match ( "/[^,]*,[^,].* ([^,].*),.*/" , $s, $matches ); 

    // or shorter ..
    preg_match ( "/[^,]*,[^,]*\b(\w+),/" , $s, $matches );

    echo $matches[1];
    // => David

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