PHP中的复杂正则表达式

PHP中的复杂正则表达式,php,regex,replace,Php,Regex,Replace,我需要编写一个正则表达式和/或PHP代码来替换如下文本: {Hello|Hi} sir. {How are you?|How are you doing?} 进入: <select id="q1"> <option value="hello">Hello</option> <option value="hi">Hi</option> </select> sir. <select id="q2">

我需要编写一个正则表达式和/或PHP代码来替换如下文本:

{Hello|Hi} sir.
{How are you?|How are you doing?}
进入:

<select id="q1">
    <option value="hello">Hello</option>
    <option value="hi">Hi</option>
</select>
sir.
<select id="q2">
    <option value="how_are_you">How are you?</option>
    <option value="how_are_you_doing">How are you doing?</option>
</select>
但是为了替换所有的东西,1美元只返回最后一个字母。。。 我也尝试过使用strpos和substr,但没有任何效果。

试试这个:

<?php
$q1 = "{Hello|Hi} sir.";
$q2 = "{How are you?|How are you doing?}";

$q = substr($q1, 1, strpos($q1,'}')-1);
$q_end = substr($q1, strpos($q1, '}')+2);
$parts = explode('|',$q);

echo "<select name=\"q1\">\n";
foreach($parts as $part){
    echo "\t<option value=\"".strtolower($part)."\">$part</option>\n";
}
echo "</select>\n";
echo $q_end . "\n";

$q = substr($q2, 1, strpos($q2, '}')-1);
$parts = explode('|',$q);

echo "<select name=\"q2\">\n";
foreach($parts as $part){
    echo "\t<option value=\"".strtolower(substr(str_replace(' ','_',$part),0,strlen($part)-1))."\">$part</option>\n";
}
echo '</select>';
输出:

<select name="q1">
    <option value="hello">Hello</option>
    <option value="hi">Hi</option>
</select>
sir.
<select name="q2">
    <option value="how_are_you">How are you?</option>
    <option value="how_are_you_doing">How are you doing?</option>
</select>

当然,这取决于你是如何从哪里得到问题的,以及你需要相应地修正的格式。但这为您提供了一个起点和如何继续的想法

OP,我们可以先看到一个初步尝试吗?我想这可能是投票被否决的原因。如果这被重新打开,我有一个答案……你不需要正则表达式。显示您尝试过的内容,这个问题可能会重新打开,我可以向您展示如何使用php函数。我编辑了这个问题,添加了我尝试过的内容。不仅仅是正则表达式,基本上是您的整个尝试
<select name="q1">
    <option value="hello">Hello</option>
    <option value="hi">Hi</option>
</select>
sir.
<select name="q2">
    <option value="how_are_you">How are you?</option>
    <option value="how_are_you_doing">How are you doing?</option>
</select>