Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 为什么';这个贪婪的正则表达式不是如预期的那样工作吗?_Php_Regex - Fatal编程技术网

Php 为什么';这个贪婪的正则表达式不是如预期的那样工作吗?

Php 为什么';这个贪婪的正则表达式不是如预期的那样工作吗?,php,regex,Php,Regex,我正在学习一些关于正则表达式的知识,有人能解释一下这里发生了什么吗?并给出一个提供预期输出的正则表达式的例子?谢谢 input data = 'Sometext|even more text' regex = '(.*)?\|?.*' replacement = '$1' expected output = 'Sometext' actual output = 'Sometext|even more text' PHP (.*)是贪婪的,所以匹配所有内容$1就是一切 您可能正在寻找:

我正在学习一些关于正则表达式的知识,有人能解释一下这里发生了什么吗?并给出一个提供预期输出的正则表达式的例子?谢谢

input data = 'Sometext|even more text'

regex = '(.*)?\|?.*'

replacement = '$1'

expected output = 'Sometext'

actual output = 'Sometext|even more text'
PHP

(.*)
是贪婪的,所以匹配所有内容<代码>$1就是一切

您可能正在寻找:

/^([^|]*).*$/
(.*)
是贪婪的,所以匹配所有内容<代码>$1就是一切

您可能正在寻找:

/^([^|]*).*$/
您的正则表达式是“所有字符,后跟可选的
|
,后跟0个或更多字符”

将首字母
(.*)
更改为
([^\|]*)
,或者将
|
设置为非可选。

您的正则表达式是“所有字符,后跟可选的
|
,后跟0个或更多字符”


将首字母
(.*)
更改为
([^\|]*)
,或者将
|
设置为非可选。

*
是贪婪的,这意味着它将尝试匹配尽可能多的文本。在这种情况下:

  • (.*)
    将匹配所有文本
  • \ |?.*
    将匹配“rest”(空字符串)

try:
regex='\\\.[^ |]*',replacement='

*
是贪婪的,这意味着它将尝试匹配尽可能多的文本。在这种情况下:

  • (.*)
    将匹配所有文本
  • \ |?.*
    将匹配“rest”(空字符串)

尝试:
regex='\\\.[^ |]*',replacement='

如果您将regex更改为
(\w+)\ \124?.
,特别是在
\w
之后添加
+
,那么您将得到预期的“Sometext”答案


使整个字符串匹配的原因是第一个
*
与整个字符串匹配。通过上面的更改,您将匹配任何单词字符。

如果您将正则表达式更改为
(\w+)\ \124;?.
,特别是在
\w
之后添加
+
,那么您将得到预期的“Sometext”答案


使整个字符串匹配的原因是第一个
*
与整个字符串匹配。通过上面的更改,您将在任何单词字符上进行匹配。

请同时添加PHP代码。
\\\\\\?
还使竖条可选。请同时添加PHP代码。
\\\\\\?
还使竖条可选。非贪婪(.*)看起来会是什么样子?@netbrain:
(.*)
但最好避免使用“匹配所有”操作符,而是像@hakre那样排除不想匹配的字符。通过添加一个
使其不贪婪。但是,我编辑了答案,因为您不想理解,只想拥有代码;)我想知道这个
[^ |]
到底是做什么的?匹配到|?之前的所有字符,非贪婪(.*)会是什么样子?@netbrain:
(.*)
,但最好避免使用“全部匹配”运算符,而是像@hakre那样排除不想匹配的字符。通过添加
使其成为非贪婪的。但是,我编辑了答案,因为您不想理解,只想拥有代码;)我想知道这个
[^ |]
到底是做什么的?匹配到|为止的所有内容?