使用PHP及正则表达式生成字符串块并提取长字符串指定内容
解决方案
1. 从指定长字符串提取目标内容
先看你提供的原始长字符串:
[Maria, C.] albS HmbF, Ctr Nat Haward Management, D-3020 Innsbruck, Austria; [Marial, C.; Evans, K. F.; Eberhardt, E.; Loew, S.] Swiss Fed Inst Technol, Swiss Fed Inst Technol, Zurich, Switzerland; [Eberyardt, E.] Univ British Columbia, Vancouver, BC X6Z 1M3, Canada
我们可以用PHP结合正则表达式精准提取Maria, C.和对应的机构地址。核心思路是匹配[作者] 机构;的结构,再筛选出目标作者的条目:
$longStr = '[Maria, C.] albS HmbF, Ctr Nat Haward Management, D-3020 Innsbruck, Austria; [Marial, C.; Evans, K. F.; Eberhardt, E.; Loew, S.] Swiss Fed Inst Technol, Swiss Fed Inst Technol, Zurich, Switzerland; [Eberyardt, E.] Univ British Columbia, Vancouver, BC X6Z 1M3, Canada'; // 匹配每个[作者] 机构的条目 $pattern = '/\[([^\]]+)\]\s*([^;]+);/'; preg_match_all($pattern, $longStr, $matches); // 遍历结果找到目标作者的条目 $targetAuthor = 'Maria, C.'; $result = []; foreach ($matches[1] as $index => $author) { if ($author === $targetAuthor) { $result['author'] = $author; $result['affiliation'] = trim($matches[2][$index]); break; } } // 输出结果 echo "提取的作者:{$result['author']}\n"; echo "提取的机构地址:{$result['affiliation']}\n";
运行这段代码后,就能得到你需要的两个目标字符串:Maria, C.和albS HmbF, Ctr Nat Haward Management, D-3020 Innsbruck, Austria。
2. 使用PHP+正则生成两个不同的字符串块
这里我们生成两个格式不同、内容唯一的字符串——一个是字母数字混合的随机字符串,另一个是包含特殊字符的结构化字符串,用正则约束格式,同时确保两个字符串不重复:
// 生成第一个字符串:8位字母数字混合(大小写) function generateFirstString() { $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $str = ''; for ($i = 0; $i < 8; $i++) { $str .= $chars[rand(0, strlen($chars) - 1)]; } // 用正则验证格式(确保是8位字母数字) if (preg_match('/^[a-zA-Z0-9]{8}$/', $str)) { return $str; } return generateFirstString(); } // 生成第二个字符串:10位,包含字母、数字、下划线和连字符,且开头为字母 function generateSecondString() { $chars = '0123456789abcdefghijklmnopqrstuvwxyz_-'; $str = chr(rand(97, 122)); // 开头小写字母 for ($i = 1; $i < 10; $i++) { $str .= $chars[rand(0, strlen($chars) - 1)]; } // 用正则验证格式 if (preg_match('/^[a-z][a-z0-9_-]{9}$/', $str)) { return $str; } return generateSecondString(); } // 生成两个不同的字符串 $str1 = generateFirstString(); do { $str2 = generateSecondString(); } while ($str1 === $str2); // 输出结果 echo "生成的第一个字符串:{$str1}\n"; echo "生成的第二个字符串:{$str2}\n";
这段代码会生成两个完全不同的字符串,且各自符合预设格式要求,正则在这里起到了验证生成结果是否合规的作用。
内容的提问来源于stack exchange,提问作者Negarin
相关产品推荐
相关产品推荐

