【发布时间】:2012-03-08 19:14:46
【问题描述】:
假设我有以下代码:
$var = '-77-randomtext-moretext.extension'
因此,变量中的任何内容都是固定的,除了连字符 ( - ) 和扩展名。
然后假设我需要将'-77-'部分存储为字符串。 “-77-”表示前两个连字符之间的任何内容,包括连字符本身。
我该怎么做?
【问题讨论】:
标签: php
假设我有以下代码:
$var = '-77-randomtext-moretext.extension'
因此,变量中的任何内容都是固定的,除了连字符 ( - ) 和扩展名。
然后假设我需要将'-77-'部分存储为字符串。 “-77-”表示前两个连字符之间的任何内容,包括连字符本身。
我该怎么做?
【问题讨论】:
标签: php
实现此目的的两种主要方法是explode 或preg_filter。
拆分:
$varArray = explode( '-', $var );
$string77 = '-' . $varArray[1] . '-'; // equals '-77-'
preg_filter;
$string77 = preg_filter( '/^(-.+-).*$/', '$1', $varArray ); // equals '-77-', or NULL if the string doesn't match
split 方法更快,但不太可靠。 preg_filter 将确保您始终获得所需的数据,或者如果数据不存在则为 NULL,但需要更多处理。
【讨论】:
您可以使用正则表达式:/-(.+?)-/
【讨论】:
$var = '-77-randomtext-moretext.extension';
preg_match('/-(.+?)-/', $var, $matches);
echo $matches[0]; // -77-
【讨论】:
preg_match返回的数组的第一个索引是整个匹配字符串,不是第一个匹配的组。
使用两个strpos() 调用之间的距离并根据这些位置获取substr():
$var = '-77-randomtext-moretext.extension';
$first_pos = strpos($var,'-');
$second_pos = strpos($var,'-',($first_pos+1)); //we offset so we find the second
$length = ($second_pos+1) - $first_pos; //get the length of the string between these points
echo substr($var,$first_pos,$length);
您也可以使用正则表达式 (preg_match()) 或使用 explode() 方法:
$pieces = explode('-',$var);
$results = '-'.$pieces[0].'-';
但这只有在您知道第一个和第二个分隔符相同时才有效。
【讨论】:
你可以使用:
$parts = explode('-', $var);
$txt = '-' . $parts[1] . '-';
【讨论】:
ltrim或trim去掉第一个连字符,就可以正常工作了。