首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP正则表达式将行与带偶尔连字符的全大写匹配。

PHP正则表达式将行与带偶尔连字符的全大写匹配。
EN

Stack Overflow用户
提问于 2010-04-20 13:05:27
回答 2查看 710关注 0票数 1

我正在尝试转换一个现有的PHP正则表达式,以应用于略有不同的文档样式。

以下是文档的原始样式:

代码语言:javascript
运行
复制
**FOODS - TYPE A** 
___________________________________ 
**PRODUCT** 
1) Mi Pueblito Queso Fresco Authentic Mexican Style Fresh Cheese; 
2) La Fe String Cheese 
**CODE** 
Sell by date going back to February 1, 2009 

成功运行的PHP匹配代码,只有在该行被星号包围时才返回"true“,并将"-”的两边分别存储为$m1和$m2。

代码语言:javascript
运行
复制
 if ( preg_match('#^\*\*([^-]+)(?:-(.*))?\*\*$#', $line, $m) ) { 
    // only for **header - subheader** $m[2] is set. 
    if ( isset($m[2]) ) { 
      return array(TYPE_HEADER, array(trim($m[1]), trim($m[2]))); 
    } 
    else { 
      return array(TYPE_KEY, array($m[1])); 
    } 
  } 

因此,对于第1行:$m1 =“食品”和$m2 =“A类型”,将跳过第2行;第3行:$m1 =“产品”,等等。

的问题:如果标题没有星号,但仍然是全大写,并且至少有4个字符,那么如何重写上面的正则匹配?例如:

代码语言:javascript
运行
复制
FOODS - TYPE A 
___________________________________ 
PRODUCT
1) Mi Pueblito Queso Fresco Authentic Mexican Style Fresh Cheese; 
2) La Fe String Cheese 
CODE
Sell by date going back to February 1, 2009 

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-04-20 13:35:20

代码语言:javascript
运行
复制
^([A-Z]{4,}(?:[A-Z ]*[A-Z])?)(?:\s*-\s*([A-Z]{4,}(?:[A-Z ]*)?))?$

这件怎么样?它将匹配至少4个字符的大写单词和至少4个大写字母的可选子标题。

票数 1
EN

Stack Overflow用户

发布于 2010-04-20 13:32:47

所以,您需要知道的是,标题以四个大写的ASCII字母开头?这应该是可行的:

代码语言:javascript
运行
复制
'#^([A-Z]{4}[^-]*)(?:-(.*))?$#'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2675266

复制
相关文章

相似问题

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