php使用正则表达式拆分字符串

时间:2009-07-23 18:20:27

标签: php regex string

我需要获取公司名称,并且它是不同数组中的股票代码。这是我的数据存储在txt文件中:

3M Company      MMM
99 Cents Only Stores    NDN
AO Smith Corporation    AOS
Aaron's, Inc.   AAN

等等

我如何使用正则表达式或其他技术? 感谢

4 个答案:

答案 0 :(得分:1)

迭代每一行,并使用正则表达式收集数据:

^(.+?)\s+([A-Z]+)$

反向引用$1将包含公司名称,$2将包含股票代码。

您还可以使用两个或三个空格分隔符将字符串拆分为两个,并修剪生成的两个字符串。这仅在您确定公司名称和股票代码符号始终由足够的空格分隔时才有效,并且公司名称本身不包含该数量的空格。

答案 1 :(得分:1)

文本文件的格式是强加给你的吗?如果您有选择,我建议您不要使用空格来分隔文本文件中的字段。相反,使用|或者$$或者你可以放心的东西不会出现在内容中,然后将它拆分成一个数组。

答案 2 :(得分:0)

试试这个正则表达式:

(.+)\s*([A-Z]{3})$

也许拥有更多PHP经验的人可以使用preg_split或类似的东西充实代码示例。

答案 3 :(得分:0)

使用可变空格作为两列文本之间的分隔符,有多种方法可以做到这一点。

您可以使用 file() 逐行处理文本文件,并使用 preg_split() 分隔变量空格上的文本,后跟一系列大写字母,后跟字符串末尾,或者您可以将 file_get_contents()preg_match_all() 一起使用,然后使用 array_column() 提取两个捕获的列。虽然后者可能会更快一些,因为它只进行 1 个 preg_ 函数调用,但决定很可能归结为开发人员的编码品味和输入文本的复杂性。

代码:(Demo)

//$lines = file('your_text_file.txt', FILE_IGNORE_NEW_LINES);
$lines = [
    '3M Company      MMM',
    '99 Cents Only Stores    NDN',
    'AO Smith Corporation    AOS',
    'Aaron\'s, Inc.   AAN',
];

foreach ($lines as $line) {
    [$names[], $symbols[]] = preg_split('~\s+(?=[A-Z]+$)~m', $line);
}
var_export($names);
echo "\n---\n";
var_export($symbols);

或者:

//$text = file_get_contents('your_text_file.txt');
$text = <<<TEXT
3M Company      MMM
99 Cents Only Stores    NDN
AO Smith Corporation    AOS
Aaron's, Inc.   AAN
TEXT;

preg_match_all('~(.+?)\s+([A-Z]+)$~m', $text, $matches, PREG_SET_ORDER);
var_export(array_column($matches, 1));
echo "\n---\n";
var_export(array_column($matches, 2));