大写标题的正则表达式

时间:2014-04-09 17:28:28

标签: php regex

我在使用PHP中的RegEx从字符串中提取标题时遇到了一些问题。有一种模式,所有标题(如果它们存在 - 也可能没有标题)。

标题的模式

  • 它总是在字符串的开头
  • 它始终处于大写状态(但如果两个单词之间有短划线,则可能有小写字母),即。 (HEADLINEWORD-lowercaseword)
  • 它可以包含Unicode字符

我在stackoverflow上有something similar,但它对我不起作用,因为它不匹配大写和小写单词之间的短语。

请帮助:)

修改

以下是一些例子:

  • VRH SDP-a O SUDBINI MERZEL I SABE Ostojić:'Ona jeizvanrednažupanica!'
  • 视频:KRVAVI NAPADNAŠKOLSKOMHODNIKUPomahnitaliučenik(16)izbo 20 ljudi:'Bio je to pravi pakao'
  • REZATĆPLEĆĆRADNICIMAIŠEFOVIMAJAVNIHPODUZEĆA?MinistarLinić:'Sve je dogovoreno'

我分析了@ Jonny5的评论并对其进行了一些修改,所以我以此结束了:

/^(?:[\p{Lu}\pN]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u

之后@PatrickQ修改了一下,所以现在最终的RegEx看起来像这样,它匹配了这个问题的所有例子。

/^(?:[\p{Lu}\pN:?]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u

3 个答案:

答案 0 :(得分:0)

因此匹配字符串开头的任何ALLCAPS单词,可能后跟短划线,然后是后面的单词。

试试这个:preg_match("/^([A-Z]+[-:\s]?.*[A-Z]+)+/", $input_line, $output_array);

在此验证:http://www.phpliveregex.com/p/4KG

答案 1 :(得分:0)

怎么样:

preg_match('/^((?:\p{Lu}+(?:-\p{Ll}+)?\s+)+)/', $string, $match);

\p{Lu}代表任何大写字母
\p{Ll}代表任何小写字母

答案 2 :(得分:0)

我分析了@ Jonny5的第一条评论和它的正则表达式并对其进行了一些修改,所以我结束了这个:

/^(?:[\p{Lu}\pN]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u

之后@PatrickQ修改了一下,所以现在最终的RegEx看起来像这样,它匹配了这个问题的所有例子。

/^(?:[\p{Lu}\pN:?]+(?:-[\pL\pN]+)*(?:\s+|$|\?|!|\:))+/u