如何将标题正则表达式显示出来?

How do I regex just the title out?

提问人:Joshua Loo 提问时间:8/26/2023 最后编辑:SammitchJoshua Loo 更新时间:8/26/2023 访问量:54

问:

示例文本:

1. Medium Size +CA $33.00
2. Small Size -CA $4.00

我希望结果只是“中等尺寸”或“小尺寸”,使用preg_match

因此,正则表达式应该检测“-”或“+”符号,然后只给我没有价格/货币的文本输出

(\S+)

(\S+\s+)

PHP 正则表达 Preg-Match

评论

0赞 Barmar 8/26/2023
替换为空字符串以删除以 或 开头的所有内容。[+-].*+-
0赞 Barmar 8/26/2023
是否有可能的尺寸?那么检测不是你真正想要的。Extra-Large-
1赞 bobble bubble 8/26/2023
@Sammitch 不确定从列表中制作代码块是否是一个好主意。Joshua 请澄清这是否是两个示例文本行:和 .或者它是一个包含行号的多行字符串。对于第一次尝试,例如^[^+-]*[^\s+-]Medium Size +CA $33.00Small Size -CA $4.00

答:

0赞 Stas Trefilov 8/26/2023 #1

此正则表达式应提取第一个字段 () 和最后两个字段之间的标题,并用空格 () 分隔:1.+CA $33.00

/^\S+ (.+) \S+ \S+$/

要一次捕获所有字幕,请使用并标记:preg_match_all()m

<?php

$txt = '1. Medium Size +CA $33.00
2. Small Size -CA $4.00
3. Extra-Large Size -CA $44.00';

preg_match_all('/^\S+ (.+) \S+ \S+$/m', $txt, $m);

print_r($m[1]);
0赞 The fourth bird 8/26/2023 #2

使用 php,你可以利用 来忘记到目前为止匹配的内容,然后只得到 or 符号之前的部分的匹配\K+-

^\d+\.\h+\K[^\n+-]*[^\s+-]

解释

  • ^字符串的开头
  • \d+\.匹配 1+ 位数字,后跟.
  • \h+\K匹配 1+ 水平空格字符,然后忘记到目前为止使用匹配的内容\K
  • [^\n+-]*匹配 or 或换行符以外的可选字符+-
  • [^\s+-]匹配至少一个非空格字符,而不是 或+-

正则表达式演示

如果应该存在 or 符号,则可以断言它:+-

^\d+\.\h+\K[^\n+-]*[^\s+-](?=\h*[+-])

正则表达式演示

或者,作为替代方案,从组 1 中尽可能少的字符开始并捕获尽可能少的字符,直到第一次出现 1+ 空格,然后是 or\S++-

^\S+\h+(.+?)\h+[+-]

正则表达式演示