首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP在括号中的一些文本之后获取文本

PHP在括号中的一些文本之后获取文本
EN

Stack Overflow用户
提问于 2017-11-13 12:50:45
回答 1查看 97关注 0票数 1

我对正则表达式很陌生,并尝试提取字符串中的文本,该字符串以新行开头括号中的值开始,直到括号中的下一个字符串为止。

我的弦:

代码语言:javascript
复制
   (1x) cat
   dog
   (2) ele(4)phant
   tiger
   (x) fish 
   bird

我要得到:

代码语言:javascript
复制
- "1x" and "cat\r\ndog"
- "2" and  "ele(4)phant\r\ntiger"
- "x" and "fish\r\nbird"

我的审判官:

代码语言:javascript
复制
(\r\n)*(\((.*?)\))(.*)

这让我觉得:

代码语言:javascript
复制
Match 1
Full match  0-8 `(1x) cat`
Group 2.    0-4 `(1x)`
Group 3.    1-3 `1x`
Group 4.    4-8 ` cat`

Match 2
Full match  13-28   `(2) ele(4)phant`
Group 2.    13-16   `(2)`
Group 3.    14-15   `2`
Group 4.    16-28   ` ele(4)phant`

Match 3
Full match  35-44   `(x) fish `
Group 2.    35-38   `(x)`
Group 3.    36-37   `x`
Group 4.    38-44   ` fish `

问题是,我的正则表达式似乎停止在线的末尾,所以新线上的字符串(狗,虎,鸟)都不见了。

您知道如何在下一次比赛之前也获得下一行的内容吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-13 12:54:17

你可以用

代码语言:javascript
复制
'~^\(([^()]*)\)(.*(?:\R(?!\([^()]*\)).*)*)~m'

regex演示

详细信息

  • ^ -行的开始(由于m修饰符,^匹配行的开始而不是整个字符串的开始)
  • \( -a (
  • ([^()]*) -第1组:
    • [^()]* - 0+字符,而不是() (如果您不想跨行溢出,并且希望在(...)中匹配(,则可以在这里使用.*? )。

  • \) -a ) char
  • (.*(?:\R(?!\([^()]*\)).*)*) -第2组:
    • .* -行的其余部分
    • (?:\R(?!\([^()]*\)).*)* - 0+序列的
      • \R(?!\([^()]*\)) -行中断后没有跟着(...)子字符串
      • .* -行的其余部分

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47264773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档