下面是我的文字。我该如何编写正则表达式来捕获与 相关的所有文本REQ_XXX
?
这是我的表情.*(REQ_.*)\|
,但它捕捉到了|3 |4 |5
。我只想让它在|
看到第一个表情后停止。
答案1
您可以使用 :
.*(REQ_[^|]*)\|
“|”字符将被排除。
答案2
编辑:
.*(REQ_.*?)\|
诀窍是?
让前面的.*
尽早停止。这样,|
后面的第一个就会终止 的范围.*
。这正是您想要的。
以下是我以前的回答。效果很好,但我认为上面的方法是正确的。
旧答案:
.*
匹配(几乎)所有内容,包括|
。用于[^|\n]*
匹配除|
换行符之外的所有内容。
.*(REQ_[^|]*)\|
\n
是必需的,因为 pure[^|]*
的匹配可能会跨越多行。我猜你不想要这个。
答案3
有些解决方案已经发布在其他答案中,我在这里给出一个总结。
您可以在此处采用多种方法,您需要根据您的需要决定使用哪一种方法:
- 给出代码中出现的字符的肯定列表:
.*(REQ_[\w]+)[\s]*\|
- 在这种情况下
[\w]+
匹配所有单词字符(字母、数字和“_”) |
捕获的结果中不包含之前的空格([\s]*
超出括号范围)
- 在这种情况下
- 给出一个否定字符列表,其中你想要你的正则表达式停止:
.*(REQ_[^|]+)\|
- 使用惰性匹配在第一次可能的情况下停止:
.*(REQ_.+?)\|