Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 变量regex表示(“*”此字符可能在此处或不在此处)值*_Php_Regex - Fatal编程技术网

Php 变量regex表示(“*”此字符可能在此处或不在此处)值*

Php 变量regex表示(“*”此字符可能在此处或不在此处)值*,php,regex,Php,Regex,如果我想在regex中搜索以下内容,我怎么可能做到这一点 我想得到每个字符串的值 this-is-a-set-syntax: VALUE "in 9"(this can be here sometimes and not) regex: /this-is-a-set-syntax: "(.*)" 如果我想检测到它是否在那里,那么我该怎么做?我认为应该怎么写: regex: /this-is-a-set-syntax: [?"](.*)[?"] 如果我想尝试检测所有这些,我会尝试类似的方法

如果我想在regex中搜索以下内容,我怎么可能做到这一点

我想得到每个字符串的值

this-is-a-set-syntax: VALUE "in 9"(this can be here sometimes and not)

regex: /this-is-a-set-syntax: "(.*)"
如果我想检测到它是否在那里,那么我该怎么做?我认为应该怎么写:

regex: /this-is-a-set-syntax: [?"](.*)[?"]
如果我想尝试检测所有这些,我会尝试类似的方法

this-is-a-set-syntax: ["|*|]VALUE["|*|][? in [0-9]+|]
-更新- 下面所有的答案,但这一个是我认为最适合的。 我已经说过,它们都很有效,都是很好的答案。 为了教育目的,你们是否都能用一点解释来更新你们的答案

谢谢,这最符合我的回答:

this-is-a-set-syntax: ["|*|]?VALUE["|*|]?([? in [0-9]+|])?
不错,但上衣更合身:

this-is-a-set-syntax:["* ]*VALUE["* ]*?([? in [0-9]+|])?
我也喜欢下面这个。我个人从未见过\1,也有兴趣了解更多有关此答案的信息。如果可以的话,我会做好标记,但我认为顶部最接近我所需要的

this-is-a-set-syntax:["* ]*VALUE["* ]*?([? in [0-9]+|])?
使用[?].[?]将匹配以下选项之一:?然后匹配任何字符0+次,除了换行符,然后再次匹配其中一个?这将是字符串中的最后一次出现。它可能会过度匹配,并且不能保证附带的结束字符

要在所有示例中获得价值,可以使用捕获组并匹配可选的双引号?使用反向引用\1来说明匹配的结束双引号

如果您只想匹配不带任何空格的值,而该值本身不能包含任何*|,则可以使用:

this-is-a-set-syntax:\h+([*|"]?)([^\s*|"]+)\1(?!\S)
解释

此-is-a-set-syntax:\h+字面匹配,后跟1+水平空白字符 [*|]? 第1组,匹配可选*|或? [^\s*|]+第2组,匹配除空格字符以外的任何字符的1+倍,*|或? \1反向引用组1中捕获的内容,以获得相应的结束字符 ?!\如果是负前瞻,则断言右侧的字符不是非空白字符 您可以使用a来匹配两个备选方案,其中组共享相同的索引,并匹配并使用分隔子字符串或1个或多个非空白字符:

this-is-a-set-syntax:\s*(?|(["|*])(.*?)\1|()(\S+))

细节

这是一套语法:-一些字符串 \s*-0+空格 ?|-分支重置组的开始 [|*]-第1组:指定字符之一:,|或* .*? - 第2组:除换行符以外的任何0个或更多字符,尽可能少 \1-与第1组中的值相同 |-或 -与空字符串匹配的伪组1 \S+-第2组:除空格外的一个或多个字符 -分支重置组结束。
您要的是什么?值可能包含空格吗?i、 e.VAL UE或转义双引号?i、 e.瓦尔\UE@CodeManiac请将下面的答案更新到此正则表达式,我将其标记为answered@TheMan68你想在比赛之前也参加吗?如果不匹配,那么最好使用哪一个来处理平衡匹配,如果必须匹配,也就是说,如果你不想匹配像value或values这样的值,那么老实说,这样做的目的是获得值。*在[|*|一个空字符串之间,因为有时没有双引号]@theman 68在你的示例中使用[?In[0-9]+|]和[*]将与列出的任何字符匹配。你到底想在那里配什么?另外,它应该是单词VALUE吗?它不应该在这个-is-a-set-syntax:VALUE中匹配吗?见@WiktorStribiżew是的,我看到了,在更新它时,我想知道这里的确切规则是什么。
this-is-a-set-syntax:\s*(?|(["|*])(.*?)\1|()(\S+))