2012-06-07 99 views
0

好吧,我們假設這是一條線
v1 = something; v2 = something2;PHP preg match?

如何獲得v1值(東西)從=開始,並在中斷;而同樣與V2通過調用它(V1)

function getVal($name){ 
    // some code to start grabbing from = and end by ; 
} 

當我打電話

getVal("v1"); 

它應該返回 「東西」 來完成

+1

你不需要你需要正則表達式'split' – mathk

+1

你不需要你需要正則表達式:) – buckley

+0

請注意,您應該寧可使用[內容摘要問題標題]分裂(http://stuck.include-once.org/#help7)。如果你在那裏更具體,它會更容易找到其他人,並吸引更多的具體幫助,而不是隻有任何人對神祕頭條感興趣。避免重複標籤,多餘的請求幫助,沒有問題的問號。 – mario

回答

1

這將工作

V1 = ([^;] *)

比賽將在第1組

只是要查找

if (preg_match('/v1=([^;]*)/', $subject, $regs)) { 
    $result = $regs[1]; 
} else { 
    $result = ""; 
} 
0
v(?:\d*)=(\w;+) 

這將匹配所有V(與後位或沒有數字),然後匹配組會後的關鍵替換V1的正則表達式=符號。這是組1

+0

如果v1的值也包含分號? –

+0

@VIPINJAIN然後它也可以包含'!'或者'''或者''''。提問者沒有指定除字母之外的其他任何要求,並且我假設他們可以在遇到特殊字符時自己更新正則表達式。 –

0

如果我明白你的問題,那麼我認爲這是你在找什麼:

$line = "v1=something;v2=something2;"; 

function getVal($name, $line){ 
    preg_match('/'.$name.'=([^;]*)/', $line, $matches); 
    return $matches[1]; 
} 

echo getVal("v1", $line); 
0

你有義務發送行至你的函數(或者你可以是骯髒,用它作爲全球)。 所以,你的函數可以是類似的東西:

<?php 
function getVal($name, $line){ 
    // some code to start grabbing from = and end by ; 
    preg_match('#;?' . $name . '=([^;]+);?#', $line, $aMatches); 
    if(isset($aMatches[1])) { 
     return $aMatches[1]; 
    } 
    return false; 
} 

$line = 'v1=something;v2=something2'; 
$v1 = getVal('v1',$line); 
echo $v1; 
?> 
0

使用此功能:

function getVal($name, $line){ 
    preg_match("/{$name}=(.+);(v(\d+)=|$)/U", $line, $matches); 
    $matches = $matches[0]; 
    $matches = preg_replace("/{$name}=/","",$matches); 
    $matches = preg_replace("/;v(\d+)=/","",$matches); 
    return $matches; 
} 

這會給你確切的答案。

測試和工作。:)