1

我正在尝试学习一些关于正则表达式的知识,有人可以向我解释这里发生了什么吗?并举例说明将提供预期输出的正则表达式?谢谢!

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
4

4 回答 4

1

(.*)是贪婪的,所以匹配一切。$1就是一切。

您可能正在寻找:

/^([^|]*).*$/
于 2012-04-11T14:10:07.020 回答
1

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

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

于 2012-04-11T14:12:31.960 回答
1

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

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

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

于 2012-04-11T14:13:51.710 回答
1

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

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

于 2012-04-11T14:13:55.983 回答