我正在尝试解析一个字符串,但我遇到了困难。下面是一段数据示例。我需要用粗体突出显示部分,这样我就可以在我们的数据库中查找名称。
AZ -国内Acme技术有限责任公司- (8484383)“
到目前为止,以下是我尝试过的:
$string = '[AZ - Domestic] Acme Technologies LLC - (8484383)"';
$start = stripos($string, ']');
$end = strripos($string , '-');
echo substr($string + 2, $start, $end);
但是这给了我这个结果:Acme Technologies LLC - (8484383)"但我真正需要的是这个Acme Technologies LLC。我已经尝试了我所知道的所有函数来得到这个结果,但似乎无法做到。
发布于 2018-02-27 05:34:55
substr
的第二个参数不是子字符串的结束位置,而是它的长度。也是如此:
substr($string, $start + 2, $end - $start - 3);
发布于 2018-02-27 05:32:37
如果字符串始终采用该格式,请执行以下操作:
$regex = '%\[.*\]\s(.*)\s-\s\(.*\)\"%';
$match = preg_match($regex, $string);
$company = $match[1];
$company
将包含您的公司名称。
在这种情况下,正则表达式是解决这类问题的“必要工具”。我推荐下载像Dr. Edmund Weitz` "The Regex Coach"这样的东西来帮助你构造正则表达式。
发布于 2018-02-28 01:06:59
下面是在单个函数调用中使用regex的三种不同方法:
代码:(Demo)
$string='[AZ - Domestic] Acme Technologies LLC - (8484383)"';
var_export(preg_match('~] \K(?: ?\w+)+~',$string,$out)?$out[0]:'fail'); // target substring after known start symbols and before known end symbol
echo "\n";
var_export(preg_replace('~\[[^\]]+] | -.*~','',$string)); // remove bracketed and parentheticals
echo "\n";
var_export(preg_match('~(?:(?:\[[^\]]*]|\([^)]*\))(*SKIP)(*FAIL))|\w+(?: \w+)*~',$string,$out)?$out[0]:'fail'); // disqualify bracketed and parentheticals
输出:
'Acme Technologies LLC'
'Acme Technologies LLC'
'Acme Technologies LLC'
由于我完全没有理由地被否决,我将添加一些非正则表达式方法,这些方法在输入字符串上也将被证明是成功的:
代码:(Demo)
两个函数调用:
$string = '[AZ - Domestic] Acme Technologies LLC - (8484383)"';
var_export(strstr(explode('] ',$string,2)[1],' -',true));
三个函数调用:
$string = '[AZ - Domestic] Acme Technologies LLC - (8484383)"';
$start=strpos($string,']')+2; // bump offset +2 to eliminate `] `
$length=strpos($string,' - (')-$start; // substract ending offset from starting offset to find length
echo "\n\n$start & $length\n";
var_export(substr($string,$start,$length));
*请注意,在搜索非字母字符时,不需要在strpos()
上使用不区分大小写。我还通过将指针设置为- (
来避免从字符串r
的末尾进行匹配。通过将指针延伸到字符串的前面,我避免了执行额外的减法来计算$length
。
输出:
'Acme Technologies LLC'
16 & 21
'Acme Technologies LLC'
附注:我对这些字符串值使用var_export()
来表示输出中没有要修剪的前导空格或尾随空格。
https://stackoverflow.com/questions/48997332
复制相似问题