1

PHP に 2 つのテキスト文字列があり、それらを HTML タグに変更したい

最初 :

*.some text
* some text

そして2番目:

#.sometext
# sometext

'*.' or '* 'toで始まりor<li>で終わる最初の文字列を変更したい'\r''\n'</li>

'#.' or '# 'そして、 toで始まりor<ol>で終わる2 番目の文字列を変更したい'\r''\n'</ol>

私はこの正規表現コードを書きましたが、動作しません:

$regex1 = "#([*.])(.*)([\n])#e";
$text = preg_replace($regex1,"('<li>$2</li>')",$text);

$regex2 = "#([#.])(.*)([\n])#e";
$text = preg_replace($regex2,"('<ol>$2</ol>')",$text);

私は何をすべきか?

どうもありがとう

4

2 に答える 2

0

以下で説明するように、コードにかなりの変更を加えることをお勧めします。

最初のコード:

<?php
$text = "
first :

*.some text
* some text

and second :

#.sometext
# sometext
";

$regex1 = "#\*(.| )(.*?)\n#";
$text = preg_replace($regex1,"<li>$2</li>\n",$text);

$regex2 = "#\#(.| )(.*?)\n#";
$text = preg_replace($regex2,"<ol>$2</ol>\n",$text);

echo $text;

そして出力

first :

<li>some text</li>
<li>some text</li>

and second :

<ol>sometext</ol>
<ol>sometext</ol>

変更点:

  • e正規表現で修飾子を使用する必要はありません
  • *.andを一致させるには、 (escaped to 、および(escaped to ) and の OR 条件を*指定するだけです。*\*.\.
  • の貪欲でないバージョンを使用してください.*。つまり.*?、可能な限り最小限のテキストのみを食べます。

PS:これはおそらくあなたが望んでいたものではありません(olはこの構造を持っています:<ol><li>...</li><li>...</li></ol>、しかし私はあなたの質問の仕様に合わせてコードを書きました。これを変更できるはずです。

于 2012-11-16T09:06:12.877 に答える
0
$str=<<<STR
abc
*.some text
* some text
def
STR;

echo preg_replace('/[\r\n]+<\/li>/i',"</li>",preg_replace('/\*[\.\s](.*)$/im',"<li>$1</li>",$str));

上記は次のように出力されます。

abc
<li>some text</li>
<li>some text</li>
def

2 番目の要件を達成するために、同様の変更を行うことができます。

2 つの正規表現を使用する理由は、文字列が次のように見える場合です。

$str=<<<STR
abc
*.some text
* some text
STR;

最後の改行がないため、最後の行が一致しない場合があります。mそのため、修飾子を使用して、$すべての行末に一致させます。

しかし、テスト結果は、 only を使用する$と次のようになることを示しています。

abc
<li>some text
</li>
<li>some text</li>

これを避けるために、別の正規表現を追加して修正し[newline]</li>ました。

于 2012-11-16T09:28:40.670 に答える