我想将第二个逗号之前的单词存储在字符串中。
所以如果字符串看起来像这样:你好,我的名字是David,bla bla。
我想设置变量$ test = David
答案 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在他的名字之后输入一个非单词字符,那么这个正则表达式(以及上面的一些)就会失败 “大卫!”和“大卫”都失败了。