首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHP解析字符串

使用PHP解析字符串
EN

Stack Overflow用户
提问于 2018-02-27 05:24:16
回答 3查看 83关注 0票数 -2

我正在尝试解析一个字符串,但我遇到了困难。下面是一段数据示例。我需要用粗体突出显示部分,这样我就可以在我们的数据库中查找名称。

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。我已经尝试了我所知道的所有函数来得到这个结果,但似乎无法做到。

EN

回答 3

Stack Overflow用户

发布于 2018-02-27 05:34:55

substr的第二个参数不是子字符串的结束位置,而是它的长度。也是如此:

substr($string, $start + 2, $end - $start - 3);
票数 3
EN

Stack Overflow用户

发布于 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"这样的东西来帮助你构造正则表达式。

票数 1
EN

Stack Overflow用户

发布于 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()来表示输出中没有要修剪的前导空格或尾随空格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48997332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档