[英]Regular expression to replace '.' at the start of the line
我試圖用點(。)“ 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);
?>
如果有人能指出正確的方向,我將不勝感激。 謝謝
為什么您的模式不起作用? 您有兩個問題:
[0-9. |0-9.]
方括號是字符類。 他們的意思是“匹配任何字符之一”。 因此,您的正則表達式的這一部分所做的就是匹配單個字符,即數字,點,空格或|。
您似乎正在嘗試創建匹配的組。 在這種情況下,您將需要括號而不是括號。 這樣的事情會做您想要完成的事情:
([0-9]+\.|[0-9]+\. )
這將匹配一些數字,后跟一個點,並可能跟一個空格。 但是,您可以使事情變得簡單得多:
[0-9]+\. ?
?
使您可以消除長表達式,因為它的意思是“模式可能包含空格”。
不過,您可以走得更遠:
\d+\.\s*
\\d
匹配任何數字, \\s
匹配任何空格。 *
表示您將匹配任意數量的空格,而不是單個空格。
最后,您的模式中也包含以下內容:
(?:\d{0})
我不確定您要執行的操作,但這表示“匹配包含完全為零數字的組”。 這沒有多大意義,也沒有必要。
您的最終模式可以很簡單:
'/^\d+\.\s*/'
最后添加的是開頭的^
。 這樣可以確保僅當數字位於行首時才匹配它們。
試試這個模式:
$pattern = '/^\d+\.\s?/';
試試這個代碼。
$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">
鍵盤 。
此處不需要任何正則表達式, ltrim
會這樣做:
$line = ltrim($line, "0123456789. ");
在行的開頭加上一個句點的數字是:
^[0-9]+\.
請注意轉義句點,以便它匹配句點而不是任何字符。
為什么不使用explode ?
如果您知道您的行以數字開頭:
$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;
您需要使用反斜杠(\\)對點(。)進行轉義,否則點與任何字符都匹配。 因此使用“ \\”。 匹配點和“。” 匹配任何字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.