我正在尝试学习一些正则表达式,有人能解释一下这里发生了什么吗?并举例说明可以提供预期输出的正则表达式?谢谢!
input data = 'Sometext|even more text'
regex = '(.*)?\|?.*'
replacement = '$1'
expected output = 'Sometext'
actual output = 'Sometext|even more text'
PHP
preg_filter("(.*)?\|?.*", "$1", 'Sometext|even more text'); // returns Sometext|even more text
答案 0 :(得分:1)
(.*)
贪婪,所以匹配一切。 $1
就是一切。
您可能正在寻找:
/^([^|]*).*$/
答案 1 :(得分:1)
你的正则表达式是“所有字符,然后是可选的|
,后跟0或更多字符”。
将初始(.*)
更改为([^\|]*)
,或将|
设为非可选。
答案 2 :(得分:1)
*
贪婪,这意味着它会尝试匹配尽可能多的文本。在这种情况下:
(.*)?
将匹配所有文字\|?.*
将匹配“rest”(空字符串)尝试:regex = '\|[^|]*', replacement = ''
答案 3 :(得分:1)
如果您将正则表达式更改为(\w+)?\|?.*
,特别是在+
之后添加\w
,那么您将得到'Sometext'的预期答案。
您进行整个字符串匹配的原因是第一个.*
与整个字符串匹配。通过上面的更改,您将匹配任何单词字符。