[英]Regex for command match words
我正在使用諸如set my_key list of values
類的命令構建應用程序。
我被“單詞”的匹配所困擾
我的命令始終以set
開頭,並且參數之間用空格分隔。 每個參數都可以帶有-
或_
或用引號引起來的包裝(例如:“我的自定義參數”),以允許空格或其他所有字符。
我在這樣的代碼中使用它:
if (preg_match_all('^set\s(("(.*?)")|(\w+)+)?/i', $command, $matches)) {
// some code
}
這是我期望的不同可能值
$text | return | $matches
set | TRUE | []
set param | TRUE | ['param']
set "foo foo_bar foo-bar 123 'bar" bar bar | TRUE | ["foo foo_bar foo-bar 123 'bar", "bar", "bar"]
set foo bar foo bar | TRUE | ['foo', 'bar', 'foo', 'bar']
set my-word | TRUE | ['my-word']
set my_word | TRUE | ['my_word']
setttttt | FALSE
這是正則表達式實時示例: https : //regex101.com/r/IAcYWE/1
(?:^(set)|\G(?!\A)(?=\h+\S))(?:\h+(?|([\w-]+)|"(.*?)")|(?:\h*?$))
set
set
set param
set "foo 123 'bar" bar bar
set foo bar foo bar
set my-word
set my_word
setttttt
set
set
set
param
set
foo 123 'bar
bar
bar
set
foo
bar
foo
bar
set
my-word
set
my_word
(?:^(set)|\\G(?!\\A)(?=\\h+\\S))
匹配以下任意一個
^(set)
^
在行首處聲明位置 (set)
從字面上將捕獲set
分為捕獲組1 \\G(?!\\A)(?=\\h+\\S)
\\G
在上一場比賽的末尾或首場比賽的字符串開頭聲明位置 (?!\\A)
負向查找,確保后面的內容不是字符串開頭的位置(基本上使\\G
與上一個匹配項結尾的位置匹配,而不是字符串的開頭) (?=\\h+\\S)
正向前瞻確保后面的內容匹配
\\h+
匹配一個或多個水平空間 \\S
匹配一個非空白字符 (?:\\h+(?|([\\w-]+)|"(.*?)")|(?:\\h*?$))
匹配以下任意一個
\\h+(?|([\\w-]+)|"(.*?)")
匹配以下內容
\\h+
匹配一個或多個水平空白 (?|([\\w-]+)|"(.*?)")
分支重置組(組中的任何子模式共享相同的編號/名稱/標識符)。 符合以下任一條件
([\\w-]+)
將以下內容捕獲到捕獲組2中
[\\w-]+
匹配集合\\w-
中的一個或多個字符(任何單詞字符\\w
或連字符-
) "(.*?)"
"
匹配雙引號"
(.*?)
多次捕獲任何字符,但次數最少,請捕獲到捕獲組2中 "
匹配雙引號"
(?:\\h*?$)
符合以下條件
\\h*?
匹配任意數量的水平空白字符,但盡可能少 $
在字符串末尾聲明位置 匹配由設置的組1定義。 參數由正在設置的組2定義。 對於每個第1 組比賽,可能存在多個第2 組比賽。 每個組2對應於最近的先前組1匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.