回答
這會幫助你理解
對此明確:(\S.*?)
(
開始您的捕獲組(第1組)\S
非空格字符.
是任何角色;*?
是「零次或多次」(非貪婪))
結束您的捕獲組
在簡單的英語,你的整個正則表達式說
- 從字符串的開頭
- 匹配零個或多個空格
- 開始捕獲組
- 尋找一個非空白
- 後跟任意字符零次或多次
- 結束捕獲組
- 匹配的零個或多個空白
- 則字符串的結尾
一種奇怪的正則表達式,恕我直言。
的代碼:
$key =~ /^\s*(\S.*?)\s*$/o
將在$1
其中產生一個字符串所有前導和尾部空格(由\s
所定義的)被去除。
意圖的代碼似乎在檢查該字符串不僅僅包含空格,並且同時獲得一個修剪過的字符串。但是,只有假設正確,該字符串不包含多行,正則表達式將無法匹配。例如," somestring\nsomestring \nmore string"
。
作爲總結,該情況下,測試不合格是:
僅由空格(由\s
定義)
- 字符串
- 空字符串。
- 與正則表達式匹配的字符串(非錨定)
/\S.*\n.*\S/s
。
是Perl相當於[\n]
.
?當s
修飾符無效時,它是否排除其他任何內容?
至於在年底o
改性劑,它似乎是an obsolete modifier in the later versions of Perl。該修飾符可防止舊版本的Perl不必要地重新編譯該模式,但當前的用法限於幾種使用情況。檢查perlop
文檔(搜索/o
)以獲取更多信息。
你說它刪除了前導空白和尾隨空白。更確切地說,它將修剪後的字符串存儲在特殊變量「$ 1」中。順便提一下,你可以縮短一點:'\ S'也可能是'.',因爲如果那個位置的字符是'\ s',它就會匹配作爲初始'\ s *'的一部分。而'.. *?'相當於'。+?'。所以你可以把'(\ S。*?)'改成'(。+?)'。或者,你可以做一些像'/(\ S。* \ S)/'(如果你知道至少有2個非空白字符)。 –
@DavidKnipe:不,如果刪除\ S,即使只有空格字符,也會進行正則表達式匹配。 – ysth
這是真的我想。儘管這並不重要,但假設OP期望在字符串中獲得一些非空白字符。 –
除了這個正則表達式的嚴格意義上,(由@naomik有據可查),整個指令:
if ($key =~ /^\s*(\S.*?)\s*$/o)
表示:
如果$key
正則表達式匹配,集團$1
將包含與$key
相同,沒有前導和尾隨空格。
\o
修飾符(現已過時),避免重新編譯正則表達式。您應該使用qr/^\s*(\S.*?)\s*$/
代替:
my $re = qr/^\s*(\S.*?)\s*$/;
if ($key =~ $re)
'/ o'修飾符已過時,因爲perl會緩存編譯後的正則表達式(如果它沒有動態變化)(即,如果沒有插入變量)。因此,這裏不需要'/ o'和'qr //'。 – amon
大量的信息在這裏:
http://perldoc.perl.org/perlre.html#Regular-Expressions
我也用這個之前,我用它來檢查regexs - 我覺得非常有幫助的(而且它也給什麼每一步都做了很好的解釋):
- 1. 「[^]」正則表達式模式的含義是什麼(javascript正則表達式)?
- 2. 正則表達式中/ gi的含義是什麼?
- 3. 你在正則表達式中的含義是什麼?
- 4. [^。] *在正則表達式中的含義是什麼?
- 5. 反斜槓在正則表達式中的含義是什麼?
- 6. 正則表達式\ S在JavaScript中的含義是什麼?
- 7. 「[[]]」在正則表達式中的含義是什麼?
- 8. 這些正則表達式的含義是什麼?
- 9. 正則表達式中'g'標誌的含義是什麼?
- 10. 「\ 2」在正則表達式結尾處的含義是什麼
- 11. 這個正則表達式的含義是什麼(php)
- 12. JavaScript中這些正則表達式的含義是什麼?
- 13. python正則表達式中'(?i)password'的含義是什麼?
- 14. 這個正則表達式的含義是什麼?
- 15. 什麼是(\ - 2 | 3?)的含義在正則表達式
- 16. *的含義是什麼?在正則表達式中?
- 17. 在這個正則表達式中\\ +的含義是什麼?
- 18. \ d +在正則表達式中的含義是什麼?
- 19. ^符號在R正則表達式中的含義是什麼?
- 20. 正則表達式中斜槓的含義是什麼?
- 21. 「\ 3」在正則表達式中的含義是什麼?
- 22. 這個正則表達式的含義是什麼?
- 23. 這個正則表達式的含義是什麼?
- 24. 這個正則表達式的含義是什麼?
- 25. 正則表達式的正則表達式是什麼?
- 26. 正則表達式的含義(正則表達式高爾夫)
- 27. perl的正則表達式的意義?
- 28. Perl正則表達式中的圓括號是做什麼的?
- 29. Perl正則表達式 - 爲什麼正則表達式/[0-9\.]+(\,,)/匹配逗號
- 30. 正則表達式(perl)中的[\ 0-9]是什麼意思?
+1你從哪裏得到的圖/ – Bohemian
檢查圖片來源:) – naomik
+1讓我們知道這個網站http://www.debuggex.com/。幫助學習正則表達式。謝謝。 – Sid