php正则表达式-提取特定字符前的所有文本
我正在尝试从字符串中提取发布者信息。它有多种格式,例如: 约翰·威利父子出版社(1995),平装本,154页 纽约,克劳威尔[1963]viii,第373页。伊卢。20厘米 纽约:班塔姆图书,c1990。xx,444页:生病的27厘米 纽约花园城,双日,1963年。142页。伊卢。22厘米。[第1版] 我只想提取出版商的名称,所以[可以忽略。但是,我需要在这之前抓取任何字符。这很复杂,因为例如3,我想抓取逗号之前的信息,但在示例2中,我只想抓取方括号之前的信息,如果可能的话,保留逗号 我愿意使用一个包含所有内容的正则表达式([和],并处理任何不完善的数据(例如,只获取“纽约”示例2),因为我不想将示例3的所有内容都插入数据库。大多数数据都在括号中,如例1和例2所示 提前感谢您的建议!这里有一个:php正则表达式-提取特定字符前的所有文本,php,regex,Php,Regex,我正在尝试从字符串中提取发布者信息。它有多种格式,例如: 约翰·威利父子出版社(1995),平装本,154页 纽约,克劳威尔[1963]viii,第373页。伊卢。20厘米 纽约:班塔姆图书,c1990。xx,444页:生病的27厘米 纽约花园城,双日,1963年。142页。伊卢。22厘米。[第1版] 我只想提取出版商的名称,所以[可以忽略。但是,我需要在这之前抓取任何字符。这很复杂,因为例如3,我想抓取逗号之前的信息,但在示例2中,我只想抓取方括号之前的信息,如果可能的话,保留逗号 我愿意使用
#(.+?)\W*\d{4}#
:
生成(如上所示):
它基本上提取序列[任意数量的非单词字符+1个字符+4位字符串(希望是年份)]之前的所有内容。这里有一个:#(.+?)\W*\d{4}#
:
生成(如上所示):
它基本上提取序列之前的所有内容[任意数量的非单词字符+1个字符+4位字符串(希望是年份)]。Hm替换:
[^\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
适用于您的示例,可能需要进行一些额外调整。Hm更换:
[^\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.可能需要使用正则表达式尽可能接近。但是为什么要在多行模式下运行它?我没有看到任何线锚。@Alan:是的,这是一个编辑工件。:)我会把它拿出来,我只是忘了做。太好了。这个很好用。另一个答案看起来也很好,但是这个答案需要最少的调整来适应我的代码。非常感谢!+1。也许你可以用正则表达式尽可能地接近它。但是为什么你说要在多行模式下运行它?我看不到任何线锚。@Alan:是的,那是这是一个编辑工件。:)我会把它拿出来,我只是忘了做。太好了。这个工作非常完美。另一个答案看起来也很有效,但这个需要最少的调整来适应我的代码。非常感谢!