2011-12-02 51 views
0

我已经将文本存储在一个值中,并且我只想在“eindformaat”之后获取文本。 以下是全文:用正则表达式捕捉一个词

$desc = 'Folder DIN A4 2-breuk altaarvouw 
135g druk glanzend 
4/4 kleurig (dubbelzijdige druk) 
2-breuk altaarvouw 

eindformaat: 29,7 cm x 41,9 cm 
gevouwen eindformaat: 20,95 cm x 29,7 cm 
gegevensformaat: 29,9 cm x 42,1 cm'; 

我要的是后“eindformaat”的值。所以这将是:29.7厘米×41.9厘米在这种情况下。 我尝试了很多preg_replace模式。但是他们没有一个适合我。 我想这一点,但没有奏效:

preg_replace('/\/eindformaat\/.*/', '', $desc); 

有人可以帮我吗?谢谢。

+1

我认为你的标题很具误导性。也许你想更新它?看起来你只是想得到一个子串 – Mawg

回答

3

你不想preg_replace,但preg_match提取。然后,就省略掉\/斜杠,因为那些文本中没有这些斜杠。

preg_match('/eindformaat:(.*)/', $desc, $result); 
print $result[1]; 

您需要在括号(.*),所以它成为结果捕获组[1]。另外.*就足够了,因为它不会超越换行符,而无正则表达式/s标志。

正则表达式的实际好处是,可以使特定的超级它:

preg_match('/eindformaat: ((\d+|,|cm|\s|x)+)/', $desc, $result); 

而作为@Jpsy指出,如果你真的只想匹配第一个eindformaat:,而不是第二与前面的字,然后添加一个^锚和/m正则表达式的标志,就像这样:

preg_match('/^eindformaat: ....../m', $desc, $result); 
+0

也会捕获'gevouwen eindformaat'。 – Jpsy

+0

好点。我不知道这意味着什么,正则表达式只会匹配第一个。但一个'^'锚可能是明智的。 – mario

+0

感谢这个选项的作品完美! – Marijn

1

而不是一个正则表达式,可以将字符串分割成线,然后在:爆炸如果存在的话:

// Split lines 
$lines = explode("\n", $desc); 

foreach ($lines as $line) { 
    // Split the current line on : 
    $parts = explode(":", $line); 
    // If the : was present and we now have 2 segments 
    // Print the second segment if the first was eidnformaat with whitespace trimmed 
    if (isset($parts[1]) && $parts[0] == "eindformaat") { 
    echo trim($parts[1]); 
    } 
} 
0

这应该与它为您:

preg_match('/eindformaat:([a-zA-Z0-9. ,]+)/g', $desc, $result); 

您的匹配项将存储在$ result的数组中。

+0

也会收到'gevouwen eindformaat'。 – Jpsy

1

尝试:

$desc = preg_replace('/(\neindformaat:)[^\n]*/i', '$1', $desc); 

这后 'eindformaat:' 删除值(这似乎是你想要的)。
否则,如果你想检索该值,你必须使用preg_match。

编辑:
这里是一个明亮一些的版本:

$desc = preg_replace('/^(eindformaat:).*/im', '$1', $desc); 
0

你为什么不得到结肠的位置,并采取verything的这一权利,并通过修剪运行它()输领先的空间?

$line = 'gevouwen eindformaat: 20,95 cm x 29,7 cm'; 

$the_bit_that_want = trim(substr($line, substr($line, ':'))); 
0

不知道如何用正则表达式来做,但尝试使用strpos和substr来产生你需要的结果。

$start_eindformaat = stripos($desc, 'eindformaat') + 13; 

$length_eindformaat = stripos($start_eindformaat , 'gevouwen eindformaat') - $start_eindformaat; 

$eindformaat = substr($desc, $start_eindformaat, $length_eindformaat