PHP 中的复杂正则表达式


Complicated regex in PHP

我需要制作一个正则表达式和/或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>

而"值"是用 _ 替换空格并删除符号的文本。

编辑:对不起,我忘记了一些信息。我已经有一个有效的正则表达式:

{([a-zA-Zàâçéèêëîïôûùüÿñæœ'-'|]{2,})}

但是为了替换所有的东西,$1只返回最后一个字母......我也尝试使用strpossubstr,但没有任何效果。

试试这个:

<?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>

当然,这取决于您从哪里获得问题的方式和位置以及您必须相应地修复的格式。但这给了你一个起点和如何进行的想法