我想決議一個 SQL 選擇指令。例如在 JavaScript 中:
a = '從 c 中選擇 a, b, d 其中 e'
/((select[\s]*(. ))(from(. ))(where(. )))/.exec(a)
這將捕獲第 3 組中的“a,b”。
但是,如果 'a,' 和 'b' 之間有換行符,則正則運算式會因為 '.' 而中斷。不捕獲換行符。因此,我嘗試將第一個 (. ) 切換為 ([.\n\r] ) 但它不起作用。即使沒有換行符,([.] ) 也不能替換 (. ):
((select[\s]*([.] ))(from(. ))(where(. )))
如果 [abc] 表示“a、b 或 c 中的任何一個”,為什么不呢?
uj5u.com熱心網友回復:
因為[.]匹配文字.; 使用字符類是將.“任何字符”的含義更改為僅匹配自身的一種方法(另一種當然是反斜杠)。
如果您希望匹配的字符集包含換行符,則必須通過將標志添加到正則運算式.來設定“單行”模式:/s
> "foo\nbar".match(/foo.bar/)
null
> "foo\nbar".match(/foo.bar/s)
[ 'foo\nbar', index: 0, input: 'foo\nbar', groups: undefined ]
雖然與您的問題無關,但您經常看到該/s標志與 ("multi-line") 標志配對,/m這會導致錨點^并$匹配內部換行符,而不僅僅是整個字串的結尾:
> "foo\nbar".match(/foo$/)
null
> "foo\nbar".match(/foo$/m)
[ 'foo', index: 0, input: 'foo\nbar', groups: undefined ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512181.html
標籤:正则表达式解析
上一篇:如何使用python在excel列中提取json物件?
下一篇:可以獲得實際的代幣價值嗎?
