preg_match匹配可选字符,然后忽略剩余文本

时间:2012-01-21 23:33:17

标签: preg-match design-patterns optional

我有以下字符串格式:

[[TEXT|TEXT]] <-- the "|TEXT" is optional

到目前为止,有效的方法是:

/([^\[]+)(?=\]\])/

将返回:

TEXT
or
TEXT|TEXT

我想匹配“| TEXT”如果它已被包含并且只匹配“|”的左侧或“]]”取决于哪个是第一个。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

更新 - 如果您只想匹配[[]]中的内容而不包括|TEXT(如果有),请尝试以下操作:

([^|\[]+?)(?=(?:\]\]|\|))

这或多或少是你的起始正则表达式,但它停在|]]

或者,如果您的正则表达式支持后视,您可以这样做:

((?<=\[\[)([^\|]+?)(?=(?:\]\]|\|))

这只会强制您从[[开始匹配。不是真的有必要,但有点未知 - 内容证明。