2009-12-16 210 views

回答

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

^ - 字符串/線路
[^ ]的開始 - 任何字符不是...
, - ...逗號
* - 零個或多個前面的
, - 逗號
[^,]* - 同樣,任何不是逗號的字符,重複零次或多次
\b - 甲字邊界(零寬度)
() - 甲捕獲組
\w - 任何單詞字符
+ - 一個或多個前述
\b的 - 甲字邊界(零寬度)
, - 逗號

2

這是基於Web不錯的工具,它的名字是txt2re

3

你的正則表達式可能是這個樣子:

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

比賽任何非逗號序列,後面跟着第一個逗號,接着是更多非逗號,然後是單詞邊界和您的實際單詞,然後是第二個逗號。

+0

字邊界是'\ b' - '\ w'就是字本身 – Amarghosh 2009-12-16 10:23:08

+0

好點,謝謝。 – Thomas 2009-12-16 10:23:50

+0

'\ w'是一個單詞字符,而不是一個單詞邊界。 '[^,]'是任何不是逗號的字符,也不是單詞字符。 – Svante 2009-12-16 10:24:24

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 

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

print $test; 
'David' 
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; 
?> 
0

Hokay,我知道這是老了,但我練...

如何/,.*?(\w+),/

有這個優秀的工具保存的解釋:http://regex101.com/r/yA4gN5

  • ,的字符相匹配,從字面上
  • .*?匹配任何字符(除換行符)
    • 量詞:介於零和無限的時間,如幾次,儘可能擴大[懶惰]
  • 1st捕獲組(\w+)
    • \w+匹配任何字字符並[a-ZA-Z0-9_]
    • 量詞:需要使用一到無限次,多次地,用之於爲[貪婪]
  • ,匹配的字符,從字面上

此正則表達式(與上面一些),如果大衛自己的名字後,進入非單詞字符,所以 失敗「大衛!」和「大衛」都失敗。