我正在尝试从字符串中提取发布者信息。它有各种格式,例如:
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所示。
提前感谢任何建议!
答案 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个数字字符串(希望是年份)]。