在SO的帮助下,我能够为我的目的制作正则表达式,效果很好,但它完全忽略了特殊字符。
$pattern='/(?=.*\b\Q'.str_replace(' ','\E\b)(?=.*\b\Q',$requestedservice).'\E\b)/i';
preg_match($pattern, $item)
此处$requestedservice
是其尝试与数据库中的$item
匹配的字符。
$item
为Walk - Dance
因此,如果$requestedservice
也是Walk - Dance
,则它不匹配,但如果$requestedservice
为{ {1}}匹配。
我不确定为什么忽略Walk Dance
-
/
等特殊字符
我正在%
使用html_entity_decode
,因此这不是问题。
任何指导都会非常有用。
答案 0 :(得分:1)
你的单词边界对你不利。例如,如果你有.
,那么你的模式是/(?=.*\b\Q.\E\b)/i
,它断言文字.
前后有一个字边界,而且.
是(?<!\w)
一个非单词字符,表示在它之前和之后必须有一个单词字符。
相反,您可以使用\b
代替第一个和第三个(?!\w)
和\b
代替第二个和第四个func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
// Create a new scene
let scene = SCNScene()
// Set the scene to the view
sceneView.scene = scene
sceneView.isPlaying = true
// create a texture that will be applied to sphere
let spriteKitScene = SKScene(size: CGSize(width: sceneView.frame.width, height: sceneView.frame.height))
spriteKitScene.scaleMode = .aspectFit
let videoUrl = Bundle.main.url(forResource: "360videoname", withExtension: "mp4")
let videoPlayer = AVPlayer(url: videoUrl!)
let videoSpriteKitNode = SKVideoNode(avPlayer:videoPlayer)
videoSpriteKitNode.position = CGPoint(x: spriteKitScene.size.width/2, y: spriteKitScene.size.height/2)
videoSpriteKitNode.size = spriteKitScene.size
videoSpriteKitNode.yScale = -1.0
videoSpriteKitNode.play()
spriteKitScene.addChild(videoSpriteKitNode)
// create a sphere and apply the texture
let sphere = create(stars: SCNSphere(radius:30), and: spriteKitScene, and: nil, and: nil, and: nil, and: SCNVector3(0,0,0))
self.sceneView.scene.rootNode.addChildNode(sphere)
}
func create(stars geometry: SCNGeometry, and diffuse: SKScene?, and specular: UIImage?, and emission: UIImage?, and normal: UIImage?, and position: SCNVector3) -> SCNNode {
let node = SCNNode()
node.geometry = geometry
node.geometry?.firstMaterial?.diffuse.contents = diffuse
node.geometry?.firstMaterial?.specular.contents = specular
node.geometry?.firstMaterial?.normal.contents = normal
node.geometry?.firstMaterial?.emission.contents = emission
node.position = position
node.geometry?.firstMaterial?.isDoubleSided = true
return node
}
来明确断言没有一个词在每个需要匹配的字符串部分之前和之后的字符。