2016-10-06 82 views
0

例如,如果我有一個HTML輸入爲123Smith456%[email protected]#***()NotSmith,並且我只想要字母字符,那麼我怎樣才能使用正則表達式來匹配並抓取Smith並將其放入一個變量中?如何獲取匹配正則表達式的字符串的唯一部分?

+0

在該問題時,如果你使用'/史密斯/'作爲一個正則表達式,它將匹配史密斯,請有關您要輸入和輸出更清晰 –

+0

@Koala我編輯了這個問題,我如何抓住字母字符給我'Smith'。 –

+0

在像https://regex101.com/r/CbP5Af/1這樣的網站上玩正則表達式(我甚至已經開始了你!)閱讀PHP手冊,'preg_match()'http://php.net/manual /en/function.preg-match.php和'preg_replace()'http://php.net/manual/en/function.preg-replace.php – Steve

回答

1

您可以通過使用preg_match函數中的PREG_OFFSET_CAPTURE選項來執行此操作。

你的表情需要用()包裹來分組你想捕獲的匹配。您可以有任意數量的組,因此您可以捕獲各個部分並將其存儲在各種變量中。

例如:

$string = '123Smith456%[email protected]#***()NotSmith'; 

preg_match('/(Smith)/', $string, $matches, PREG_OFFSET_CAPTURE); 

print_r($matches); 

這將輸出:

Array 
(
    [0] => Array 
     (
      [0] => Smith 
      [1] => 3 
     ) 

    [1] => Array 
     (
      [0] => Smith 
      [1] => 3 
     ) 

) 

如果您正在尋找提取所有實際的 「話」,你可以做這樣的事情:

$string = '123Smith456%[email protected]#***()NotSmith'; 

preg_match('/([A-Za-z]+)/', $string, $matches, PREG_OFFSET_CAPTURE); 

print_r($matches); 

這將匹配所有出現的任何字符在AZ或az範圍內出現一次或多次的字符。其輸出:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => Smith 
        [1] => 3 
       ) 

      [1] => Array 
       (
        [0] => NotSmith 
        [1] => 20 
       ) 

     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [0] => Smith 
        [1] => 3 
       ) 

      [1] => Array 
       (
        [0] => NotSmith 
        [1] => 20 
       ) 

     ) 

) 

參見:https://secure.php.net/manual/en/function.preg-match.php

相關問題