php获取标签内文本,使用php regex从包含html标签的文本中获取所有单词

我目前正尝试使用PHP从包含HTML标记的文本中获取所有单词

我的regex有一个问题,如果一个单词以重音结束("_"例如),我的单词就不会被捕获。

我的正则表达式是

$re = '/([^

\t\f>< /]+(?!>))\b/';

$str = 'Non ! Non ! Je ne veux pas d\'un éléphant dans un boa.

Un boa c\'est très dangereux, et un éléphant élévé c\'est très encombrant. Chez moi c\'est tout petit. J\'ai besoin d\'un mouton. Dessine-moi un mouton.

-Laisse-moi dire mouton... For saints have hands that pilgrims\' hands do touch

preg_match_all($re, $str, $matches);

// but word elevé is not completely match

print_r($matches);

但是,在我的例子中,单词"_l_v_"不匹配

请在此处找到一个示例:Regex Live示例

为什么这个正则表达式与重音不匹配?

请发布一个代码示例,以便我们更好地提供帮助,但您可能正在寻找mb-ereg-u匹配-默认情况下,php的字符串函数只能操作ASCII字符。

打开你的"活例子",匹配8是éléphant,其中包括你的重音字符。

抱歉,我更新了我的帖子。单词"elev&233;"不匹配。谢谢你的帮助

@用户3257966 YW!如果答案有助于解决您的问题,请参阅此处(:

如果要使用regex,可以使用:

]+>(*SKIP)(*FAIL)|([A-zà-?]+)

工作演示

请注意,regex character类中的字符范围使用ASCII范围,我用最简单的方法,但请记住,该范围包含您可能不需要的符号。如果要支持特定字符,请检查ASCII表并使用所需的范围

另外,如果要将c'est捕获为单个单词,则只需在character类中添加单引号,如下所示:

]+>(*SKIP)(*FAIL)|([A-zà-?']+)

编辑:如果您检查Bobble气泡注释,您将发现Unicode标志的一个非常有用的用法。引用他的评论,您可以使用一个非常简单的regex,方法是使用这样的EDOCX1(unicode)标志:

]+>(*SKIP)(*FAIL)|([\w']+)

工作演示

如果您希望由-分隔的单词(如Dessine-moi)匹配为单个单词而不是2,只需将连字符添加到carecter类中,如下所示:

]+>(*SKIP)(*FAIL)|([\w'-]+)

编辑2:由于您第二次编辑了您的问题,并且还评论说您不希望使用初始连字符,因此您可以使用此regex:

]+>(*SKIP)(*FAIL)|([\w']+(?:[\w'-]*))

工作演示

或者用[\w\'-]代替[A-zÀ-ÿ']和u (PCRE_UTF8)标志(也不需要捕获组)。还可以了解为什么A-z会导致意外的匹配。

谢谢费德里克!只是一点小意思,"c'est"在2个部分是匹配的,但必须只有一个词。有可能吗?(juste 1匹配if')thx

@BobbleBubble,对了,这就是为什么我把关于ASCII范围的注释放在这里的原因,这个想法是为了显示范围特性,我让OP来实现他想要使用的任何范围。

@用户3257966我已经回答了这个问题,并以c'est为例。阅读答案,最后你会发现第二个regex与c'est匹配为一个单词。

@BobbleBubble非常有用,他不知道\w在Unicode模式下也匹配重音字符。我在答案中添加了这个信息。谢谢你的评论

THX@Frederico,你救了我一天:)

@BobbleBubble THX也是!

最后一件事我的朋友……如果这个符号开始我的话,我怎么也抓不到这个符号呢?像这样:-莱西莫迪尔穆顿…(我编辑了我的帖子)

@用户3257966我已经为您的评论添加了第二个编辑

@费德里科广场非常感谢!

@弗雷德里科。对不起,我对瑞格斯很不好,但在这里,"圣人有手,朝圣者的手会碰到,"朝圣者被他的"抓住"这个词,有什么解决办法吗?:)

@用户3257966,你可以试试这个]+>(*SKIP)(*FAIL)|(\w+(?:[\w'-]*\w+))。工作演示

@费德里科广场!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值