我需要从以下几行中找出以下几行数据,我将分别处理每一行。
以下四行应涵盖需要分析的每种数据可能性:
// lines to be analyzed
Chuck Norris (M) - 12/1/2009 (5 years)
Rocky Joseph Balboa (M) - 2/26/2012 (2 years)
Mary-Jane Smith (F) - 03/12/2012 (6 years)
Patricia Howser-Silverstine (F) 5/04/2009 (11 years)
// data to be extracted
First name: Chuck Last name: Norris Gender: M Birthdate: 12/1/2009
First name: Rocky Last name: Joseph Balboa Gender: M Birthdate: 2/26/2012
First name: Mary-Jane Last name: Smith Gender: F Birthdate: 03/12/2012
First name: Patricia Last name: Howser-Silverstine Gender: F Birthdate: 5/04/2009
我想使用正则表达式捕获每行的第一个,姓氏,性别和生日,我将每个数据存储到一个变量中,以便稍后插入到数据库表中。我需要一个正则表达式列表,它可以找到我需要的每一段数据。
感谢任何帮助。
答案 0 :(得分:6)
您可以使用此正则表达式捕获所有这些值:
$re = '~^(?<fname>[\p{L}-]+)\h+(?<lname>[\p{L}\h-]+?)\h+\((?<gender>[MF])\)[-\h]+(?<dob>[\d/]+)~mu';
答案 1 :(得分:1)
如果需要匹配(或丢弃)中间名,则此变体使用可选的捕获组来执行此操作:
^(?<fname>[\p{L}-]+)\h+(?:(?<mname>[\p{L}-]+)\h+)?(?<lname>[\p{L}\h-]+?)\h+\((?<gender>[MF])\)[-\h]+(?<dob>[\d/]+)