用正则表达式抓住一个单词

时间:2011-12-02 14:03:19

标签: php regex preg-replace

我有一个存储在值中的文本,我只想在“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 cm x 41,9 cm在这种情况下。 我用preg_replace尝试了很多模式。但它们都不适合我。 我试过这个,但它不起作用:

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

有人可以帮帮我吗?感谢。

6 个答案:

答案 0 :(得分:3)

您不希望preg_replace,而是preg_match进行提取。然后只留下转义的\/斜杠,因为文本中没有这些斜杠。

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

parens中需要(.*),因此它会成为结果捕获组[1]。另外.*就足够了,因为如果没有正则表达式/s标记,它就不会超出换行符。

正则表达式的实际优势在于你可以使它具有超级特异性:

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

正如@Jpsy指出的那样,如果你真的只想匹配第一个eindformaat:而不是第二个匹配前一个词,那么添加一个^锚点和{{1正则表达式标志,如:

/m

答案 1 :(得分: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]);
  }
}

答案 2 :(得分:1)

尝试:

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

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

修改
这是一个更亮的版本:

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

答案 3 :(得分:0)

这应该适合你:

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

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

答案 4 :(得分:0)

你为什么不得到冒号的位置并采取一切正确的方法并通过trim()运行以失去领先的空间?

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

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

答案 5 :(得分: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