用正则表达式在第二个逗号之前找到单词

时间:2009-12-16 10:03:53

标签: php regex string

我想将第二个逗号之前的单词存储在字符串中。

所以如果字符串看起来像这样:你好,我的名字是David,bla bla。

我想设置变量$ test = David

7 个答案:

答案 0 :(得分:11)

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

^ - 字符串/行的开头
[^ ] - 任何不是......的人物 , - ...逗号
* - 前面的零个或多个 , - 逗号
[^,]* - 同样,任何不是逗号的字符,重复零次或多次
\b - 字边界(零宽度)
( ) - 捕获组
\w - 任何单词字符
+ - 前面提到的一个或多个 \b - 字边界(零宽度)
, - 逗号

答案 1 :(得分:3)

你的正则表达式看起来像这样:

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

匹配任何非逗号序列,然后是第一个逗号,接着是更多非逗号,然后是单词边界和实际单词,然后是第二个逗号。

答案 2 :(得分:2)

这是基于网络的漂亮工具,其名称为 txt2re

答案 3 :(得分:0)

<?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

?>

答案 4 :(得分:0)

$s = "Hello, my name is David, bla bla.";
$s = explode(',', $s);
$s = explode(' ', $s[1]);
$test = $s[sizeof($s)-1];

print $test;
'David'

答案 5 :(得分:0)

这是我的方法:

<?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;
?>

答案 6 :(得分:0)

Hokay,我知道这已经老了,但我正在练习......

/,.*?(\w+),/怎么样?

这个优秀的工具有一个保存的解释:http://regex101.com/r/yA4gN5

  • ,匹配字符,字面意思
  • .*?匹配任何字符(换行符除外)
    • 量词:在零和无限次之间,尽可能少,根据需要扩展[懒惰]
  • 第一个捕获小组(\w+)
    • \w+匹配任何单词字符[a-zA-Z0-9 _]
    • 量词:在一次和无限次之间,尽可能多次,根据需要回馈[贪心]
  • ,匹配字符,字面意思

如果David在他的名字之后输入一个非单词字符,那么这个正则表达式(以及上面的一些)就会失败 “大卫!”和“大卫”都失败了。