0

行番号をドット (.) "123." に置き換えようとしています。正規表現を使用。たとえば、行は次のとおりです。

123. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

ここで「123」を取り除きたいと思います。これは行の先頭にあります。現時点では、行の任意の場所にある任意の数字とドット (.) を置き換えるコードがありますが、行の先頭でのみ数字とドット (.) を削除したいと考えています。ここに私のコードがあります、

<?php
$pattern = '/[0-9. |0-9.](?:\d{0})/';
$replacement = ' ';
$try= preg_replace($pattern, $replacement, $line);
echo "\r\n" . html_entity_decode($try);
?>

誰かが私を正しい方向に向けることができれば幸いです。ありがとう

4

7 に答える 7

2

あなたのパターンがうまくいかなかったのはなぜですか?2 つの問題がありました。

[0-9. |0-9.]

ブラケットは文字クラスです。それらは「任意の文字の1つに一致する」ことを意味します。したがって、正規表現のこの部分が行うことは、数字、ドット、スペース、または | である単一の文字に一致することです。

一致するグループを作成しようとしているようです。その場合、括弧の代わりに括弧が必要になります。このようなものは、あなたが達成しようとしていたことを行います:

([0-9]+\.|[0-9]+\. )

これは、いくつかの数字の後にドットが続き、おそらくその後にスペースが続くものと一致します。ただし、それをもっと簡単にすることができます。

[0-9]+\. ?

を使用?すると、「パターンにスペースが含まれている可能性がある」という意味になるため、長い表現を削除できます。

ただし、さらに先に進むこともできます。

\d+\.\s*

\d任意の数字に\s一致し、任意の空白に一致します。 *単一のスペースではなく、任意の量の空白に一致することを意味します。

最後に、これもパターンに含まれていました。

(?:\d{0})

あなたが何をしようとしているのかわかりませんが、これは「正確にゼロ桁を含むグループに一致する」と言っています。それはあまり意味がありませんし、必要でもありません。

最終的なパターンは次のようになります。

'/^\d+\.\s*/'

1 つの最後の追加は^、冒頭にありました。これにより、番号が行の先頭にある場合にのみ一致することが保証されます。

于 2013-01-30T12:18:36.070 に答える
1

このコードを試してください..

$line = '123. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
$pattern = '/^[0-9]+\./';
$replacement = "";
$try= preg_replace($pattern, $replacement, $line);
echo "\r\n" . html_entity_decode($try);

結果
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

コードパッド

于 2013-01-30T12:02:27.290 に答える
1

このパターンを試してください:

$pattern = '/^\d+\.\s?/';
于 2013-01-30T11:52:31.037 に答える
0

ここでは正規表現は必要ありltrimません。

$line = ltrim($line, "0123456789. ");
于 2013-01-30T11:52:49.747 に答える
0

行頭にピリオドが続く数字は次のようになります。

^[0-9]+\.

ピリオドをエスケープして、任意の文字ではなくピリオドに一致することに注意してください。

于 2013-01-30T11:53:10.873 に答える
0

爆発を使わないのはなぜですか?

行が数字で始まることがわかっている場合:

$initial_string = '123. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
$desired_string = explode('.', $initial_string, 2)[1];
print $desired_string;

編集:行が数字で始まるかどうかわからない場合:

$initial_string = '<html xmlns="http://wwww3org/1999/xhtml" xml:lang="en" lang="en">';
$initial_arr = explode('.', $initial_string, 2);

if (count($initial_arr)>0 && ctype_digit($initial_arr[0])){
    $desired_string = $initial_arr[1];
}else{
    $desired_string = $initial_string;
}
print $desired_string;
于 2013-01-30T11:53:32.560 に答える
0

バックスラッシュ (\) でドット (.) をエスケープする必要があります。そうしないと、ドットは任意の文字と一致します。したがって、「\」を使用します。ドットと "." を一致させます。任意の文字に一致します。

于 2013-01-30T11:53:53.333 に答える