php regex - 在某些字符之前提取所有文本

时间:2010-09-25 17:02:13

标签: php regex

我正在尝试从字符串中提取发布者信息。它有各种格式,例如:

  

John Wiley& Sons(1995),平装,154页

     

New York,Crowell [1963] viii,373 p。画家。 20厘米。

     

纽约:Bantam Books,c1990。 xx,444 p。 : 生病。 ; 27厘米。

     

Garden City,N.Y。,Doubleday,1963。142 p。画家。 22厘米。 [第1版。]

我想要提取的只是发布者名称,所以在(或者[可以忽略]之后的所有内容。然而,在此之前我需要抓住任何字符。而且由于例如三,我很复杂我想在逗号之前获取信息,但在示例二中,我只想在方括号之前获取信息,并在可能的情况下保留该逗号。

我愿意使用一个前所未有的正则表达式([和,并且使用任何不完美的数据(例如只获得“纽约”),因为我不想插入所有的例子3进入数据库。大多数数据的括号中的日期如例1和2所示。

提前感谢任何建议!

2 个答案:

答案 0 :(得分:2)

嗯,如何替换:

[^\w\n\r]+c?[12]\d{3}.*

空字符串?说明:

[^\w\n\r]+   # any non-word character (but no new lines either!)
c?           # an optional "c"
[12]\d{3}    # a year (probably, at least)
.*           # all the rest of the line

适用于您的示例,可能需要一些额外的调整。

答案 1 :(得分:1)

这是一个:#(.+?)\W*.\d{4}#

preg_match_all('#(.+?)\W*.\d{4}#', $books, $matches);
$publishers = array_map('trim', $matches[1]);

print_r($publishers);

生成(如ideone所示):

Array
(
    [0] => John Wiley & Sons
    [1] => New York, Crowell
    [2] => New York: Bantam Books
    [3] => Garden City, N.Y., Doubleday
)

它基本上提取序列前的所有内容[任意数字非单词字符+ 1个字符+ 4个数字字符串(希望是年份)]。