我需要一些正则表达式专家的帮助。
我有一个脚本给出了一个固定的模式列表。使用非常简单的正则表达式,我在目标文本中搜索模式存在性。例如:
/.*TFT.*/
/.*LCD.*/
/.*ANTI-GLARE.*/那些字符串- TFT,LCD,防眩光-我不能修改它们。嗯,问题是在防眩光-破折号将导致不匹配的AntiGlare。我知道我是这样做的:
/.*ANTI-?GLARE.*/这将匹配这两个变体,但我不能修改该字符串。我的问题是:在图案中,除了感叹号之外,还有其他方法可以选择符号吗?
编辑-清除
经过一些回答和提示后,我将尝试给出更具体的描述我的问题。我在表中有一个字符串:
抗眩光
TFT
AntiGlare
LCD通过XML,我收到了新的模型,描述如下:
防眩光
我需要确保-我有一个条目与“反眩光”类似的描述。我不能改变这种防眩光接收,因为有很多字符串-在广泛的范围内变化-这是不可能建立逻辑组或任何这样的正则表达式。它使用php脚本构建,如下所示:
$rexp="/.*~.*/i"; 发布于 2014-10-03 08:50:35
您使用的是php,所以我们可以假设您得到了一个数组,每个字符串都已被接受。
这里有一种你想做的事,如果只是虚情假意的话:
<?php
$words = array('TFT', 'LCD', 'ANTI-GLARE');
$pattern = '/(' . str_replace('-', '-?', implode($words, '|')) . ')/i';
?>这将生成模式/(TFT|LCD|ANTI-?GLARE)/i,才能满足你的需要。
编辑
正如注释中提到的,您正在接收所有可能的字符串:TFT;LCD;AntiGlare;Anti-Glare;Anti Glare。然后,您只需将它们与管道(regex中的OR操作符)连接起来,并用圆括号将整个块括起来:
$words = array('TFT', 'LCD', 'AntiGlare', 'Anti-Glare', 'Anti Glare');
$pattern = '/(' . implode($words, '|') . ')/i';这将生成模式/(TFT|LCD|AntiGlare|Anti-Glare|Anti Glare)/i。
发布于 2014-10-03 08:45:45
嗯,你不能修改那些正则表达式,但是我想你可以修改文本。所以你可以这么做。
使用带有不区分大小写标志的regex /antiglare/,然后用ANTI-GLARE替换它们。我希望这对你有用。我不能给您代码,因为我自己不知道php。
https://stackoverflow.com/questions/26175837
复制相似问题