Php 确切单词与破折号冲突

Php 确切单词与破折号冲突,php,regex,Php,Regex,最初,我只使用单词边界来精确匹配单词- 更新1: 1) 与单词内部标点符号精确匹配,如20岁的孩子 搜索年份的,只有年份的精确匹配 --单独搜索年份,将不匹配年份 如果我搜索20岁,则精确的20岁匹配 --搜索20或year或old将不匹配20岁的 2) 在标点符号之前或之后精确匹配单词 如果我搜索old,精确的单词或标点符号之前或之后old.old-oldoldold这些将匹配 --old将与其中带有标点符号的单词不匹配20岁的 我们最后的进展 -求解(2)而不是(1) -求解(1

最初,我只使用单词边界来精确匹配单词-

更新1

1) 与单词内部标点符号精确匹配,如
20岁的孩子

  • 搜索
    年份的
    ,只有
    年份的
    精确匹配
--单独搜索
年份
,将不匹配
年份

  • 如果我搜索
    20岁
    ,则精确的
    20岁
    匹配
--搜索
20
year
old
将不匹配
20岁的

2) 在标点符号之前或之后精确匹配单词

  • 如果我搜索
    old
    ,精确的单词或标点符号之前或之后
    old
    .old
    -old
    old
    old
    这些将匹配
--
old
将与其中带有标点符号的单词不匹配
20岁的

我们最后的进展

-求解(2)而不是(1)


-求解(1)而不是(2)

包括大小写不敏感和unicode卷曲单引号

模式:
/(?:^|\s)[-\'.]*\Kold(?=[-\'.].]*(?:\s |$)/ui

替换:
young

演示:

此输入:
old 20岁_old-maid _old--old-old-“old”old“20岁”…old

将成为:
young 20岁(少女)(少女)(少女)(少女)(少女)(少女)(少女)(少女)(41

(?:^ |\s)
匹配字符串或空白字符的开头

[-\'.]*
匹配字符类(列表)中的零个或多个字符

\K
重新启动完整字符串匹配。这样做是为了避免使用捕获组,更重要的是避免使用php不允许的“可变宽度查找”

old
是正在搜索的文本字符串。您可以在此位置应用变量

(?=[-|,,.]*(?:\s |$)
是一个由两部分组成的前瞻表达式。它匹配字符类(列表)中的零个或多个字符,然后需要空白字符或字符串结尾


所有这些卷积都是为了匹配具有可选前导和/或尾随标点的目标子字符串,但除此之外,没有非空格字符。

包括大小写不敏感和unicode卷曲单引号

模式:
/(?:^|\s)[-\'.]*\Kold(?=[-\'.].]*(?:\s |$)/ui

替换:
young

演示:

此输入:
old 20岁_old-maid _old--old-old-“old”old“20岁”…old

将成为:
young 20岁(少女)(少女)(少女)(少女)(少女)(少女)(少女)(少女)(41

(?:^ |\s)
匹配字符串或空白字符的开头

[-\'.]*
匹配字符类(列表)中的零个或多个字符

\K
重新启动完整字符串匹配。这样做是为了避免使用捕获组,更重要的是避免使用php不允许的“可变宽度查找”

old
是正在搜索的文本字符串。您可以在此位置应用变量

(?=[-|,,.]*(?:\s |$)
是一个由两部分组成的前瞻表达式。它匹配字符类(列表)中的零个或多个字符,然后需要空白字符或字符串结尾


所有这些卷积都是为了匹配具有可选前导和/或尾随标点的目标子字符串,但除此之外没有非空格字符。

我们是否需要考虑多个前导或尾随标点的可能性<代码>单词,
?我很难在手机上说出,但我猜它是unicode单引号或卷曲单引号。复制字符并粘贴到谷歌搜索中以确定。当我进入我的计算机时,我将在我的答案中添加unicode标志。我们需要考虑多个前导或尾随标点符号的可能性吗<代码>单词,
?我很难在手机上说出,但我猜它是unicode单引号或卷曲单引号。复制字符并粘贴到谷歌搜索中以确定。当我进入电脑时,我会在我的答案中添加unicode标志。@kiki已更新。如果此问题完全解决,您可以授予绿色勾号。如果您需要进一步的解释/澄清,或者有任何不太正确的地方,请给我留下评论。(我们也应该删除我们现在已经过时的评论来整理页面)我的答案的核心仍然是一样的。根据需要展开角色类。我将把它留给你,以确保标点符号列表对你的项目是准确的。谢谢@mickmackusa!将继续探索,回来学习新东西@kiki更新了。如果此问题完全解决,您可以授予绿色勾号。如果您需要进一步的解释/澄清,或者有任何不太正确的地方,请给我留下评论。(我们也应该删除我们现在已经过时的评论来整理页面)我的答案的核心仍然是一样的。根据需要展开角色类。我将把它留给你,以确保标点符号列表对你的项目是准确的。谢谢@mickmackusa!将继续探索,回来学习新东西!